在 github repo 的子目录中获取包

sjl*_*lee 8 github go

如果您有一个 go-only 存储库(假设它是https://github.com/foo/bar),您可以将您的代码放在根级别,并使用以下命令导入其他代码:

go get -u github.com/foo/bar
Run Code Online (Sandbox Code Playgroud)

其中的目录和子目录将被识别为包。

但是假设您正在 github 上创建一个多语言存储库(例如,一个具有 java 代码、go 代码、javascript 代码等)。并且你想让你的 go 代码可供其他人使用。从代码组织的角度来看,通常将 go 代码放在根级别是不可以的。可能更常见的是

(root)
  |-- src
       |-- main
            |-- go
            |-- java
            |-- javascript
            |-- proto
Run Code Online (Sandbox Code Playgroud)

Go 代码的根级别现在位于https://github.com/foo/bar/src/main/go。但是您不能再使用以前的go get命令,因为它会查看顶层。您真的不想使用它们go get -u github.com/foo/bar/src/main/go,因为所有这些现在都将成为包名称的一部分,这真是令人讨厌。

问题是,有没有办法指定一个确切的 URL,以便您可以将包名和 URL 分开?换句话说,我正在寻找类似的东西

go get -u github.com/foo/bar https://github.com/foo/bar/src/main/go
Run Code Online (Sandbox Code Playgroud)

(当然,包名应该与源代码中实际存在的包名相匹配,否则将无法编译)。

我查看了 go 文档,但我不清楚这是否可行。

Car*_*arl 3

您自己已经回答了这个问题,所以我只是确认您会这样做。

在您的示例中,您将使用:go get -u github.com/foo/bar/src/main/go

当然,它看起来并不漂亮,但请记住,大部分令人厌恶的事情都来自于你控制的路径。

例如,它可以是:go get -u github.com/foo/bar/go

我可以确认这是有效的,因为这是我们在生产中使用的。

根据设计,go get 路径就是您从中获取它的地方。您确实有另一种选择 - 使用重定向(如gopkg.in)。然而,这也增加了其自身的复杂性。