首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分割Go工作区

如何分割Go工作区
EN

Stack Overflow用户
提问于 2016-06-25 02:18:59
回答 1查看 125关注 0票数 0

因此,我遇到了整个Go工作区和我自己的个人代码组织的问题。因此,我理解了工作区应该如何设置为,与src、pkg和bin一起,放在一个重要的gocode文件夹下。

然而,这并不能很好地与我的工作流程集成。在我的代码文件夹中,我还有另外两个文件夹: Work和Personal。当然,Work是一个文件夹,其中包含了我为工作所做的所有项目,personal是用于个人辅助项目或有趣的测试。在这两个文件夹中我都有Go项目,还有JavaScript、python和HTML项目。我真的不想在同一个Go文件夹中同时跨越工作和个人,因为我希望将cd放入工作中并查看我所有的项目(无论是作为参考还是便于访问),个人项目也是如此。我不想在一个充满工作冲突和个人Go代码的文件夹和另一个充满Javascript的工作文件夹之间切换。

但是当我按照我解释的那样组织我的项目时,我基本上破坏了整个GOPATH功能,这反过来又会与import语句等打乱。那么,我是否仍然可以继续按原样组织我的项目,并欺骗我认为它们都在一个中心的Go/src文件夹中?我相信我可以用symlink做一些事情,因为我在Mac o x上,但我不知道这是否有效。有没有开发人员在自己的公司里解决这个问题?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-06-25 03:21:32

https://dmitri.shuralyov.com/blog/18

该博客列出了如何在$GOPATH变量中设置多个路径,让您随心所欲。这个想法是,您有一些默认工作区(所有go get包都将放在其中),然后您拥有的任何其他工作区都可以在环境变量中遵循该默认工作区(在基于unix的环境中,以冒号分隔)。Go工具是专门为处理这种用例而设计的,它将使用找到的依赖项的第一个版本,按顺序检查$GOPATH中的每个路径。

如果你这样做了,你唯一需要注意的是你不能再使用$GOPATH作为一个实际的路径字符串(你必须先拆分它)。一些Go包可能无法处理此设置。但是,如果您需要自己在$GOPATH中的任何路径中查找文件,此函数将执行以下操作:

代码语言:javascript
复制
func FindInGoPath(filePath string) (string, error) {
    pathList := strings.Split(os.ExpandEnv("${GOPATH}"), string(os.PathListSeparator))

    if strings.TrimSpace(pathList) == "" {
        return "", errors.New("$GOPATH environment variable is empty/not set")
    }

    for _, path := range pathList {
        if !strings.HasSuffix(path, string(os.PathSeparator)) {
            path += string(os.PathSeparator)
        }
        if _, err := os.Stat(path + filePath); err == nil {
            return path + filePath, nil
        }
    }
    return "", errors.New("file not found")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38019786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档