0

假设我决定按如下方式组织所有个人开发的包:

$GOPATH/
    bin/
    pkg/
    src/
        somepkg1
        somepkg2
        ...
        somepkgN

此外,假设它们之间有大量的代码重用,所以我决定将整个 $GOPATH 工作空间保留在同一个 Git 存储库下(每个包都可以是一个子模块),而不是子包不太连贯的更传统场景(仅因为go get从同一工作区使用而共存):

$GOPATH/
    bin/
    pkg/
    src/github.com/<me>/
        somepkg1
        somepkg2
        ...
        somepkgN

我可以看到,使用前一种方法(不在github.com/<me>/ 包路径中使用),go get将无法获取包,因为它们没有“声明”自己可以在线使用。但是,可以通过使用 git 子模块轻松解决​​这个问题,因此首先会获取所有包(请注意,它是一个严格控制的生态系统,因此不会出现名称冲突)。

是否有任何其他限制(除了go get)不使用包的完整路径?

(我最关心的是某些代码重构/分析工具所产生的限制,这些工具利用了允许在线查找包的repository path as base path 约定。)go get

4

1 回答 1

2

对于 Go 编译器和 go 工具的所有元素,除了go get包导入路径之外,都是包含导入路径的几乎不透明的字符串。您可以根据需要布置代码(编译器本身很乐意将不同文件夹中的文件编译到一个包中)。如果您不需要或不希望您的代码go get能够使用,则无需使用 repo 路径。golang.org/x/tools 中的分析和重构工具在不透明的导入路径上工作(据我所知)并且不访问网络。

于 2015-11-12T21:13:54.073 回答