在github仓库的子目录中获取包

如果您有只读存储库(假设它是 https://github.com/foo/bar ),您可以将代码放在根级别,并使用以下命令导入其他代码:< / p>

 去获取-u github.com/foo/bar
</ pre>

其中的目录和子目录将被识别为包 。</ p>

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

 (root)
|-src
|-main
|-go
|-java
|-javascript
|-proto
</ code> </ pre>

go代码的根目录现在位于 https://github.com/foo/bar/src/main/go 。 但是您将无法再使用前面的 go get </ code>命令,因为它会在顶层显示。 您真的不想使用 go get -u github.com/foo/bar/src/main/go </ code>,因为所有这些现在都将成为软件包名称的一部分,这确实令人讨厌。 / p>

问题是,有没有一种方法可以指定一个确切的URL,以便您可以分隔软件包名称和URL? 换句话说,我正在寻找类似</ p>

 去得到-u github.com/foo/bar https://github.com/foo/bar/src/  main / go 
</ code> </ pre>

(当然,程序包名称应与源代码中的实际名称匹配,否则它将无法编译)。</ p>

我查看了go文档,但我不清楚这是否可行。</ p>
</ div>

展开原文

原文

If you have a go-only repo (let's say it's https://github.com/foo/bar), you can put your code right at the root level, and have others import using the following command:

go get -u github.com/foo/bar

Directories and subdirectories therein would be recognized as packages.

But suppose you are creating a multi-language repo on github (e.g. one that has java code, go code, javascript code, etc.). And you want to make your go code available for others to use. Usually putting the go code right at the root level would be a no-no from the code organization standpoint. What might be more common may be

(root)
  |-- src
       |-- main
            |-- go
            |-- java
            |-- javascript
            |-- proto

The root level of your go code is now at https://github.com/foo/bar/src/main/go. But you can no longer use the previous go get command as it would look at the top level. You don't really want to use go get -u github.com/foo/bar/src/main/go either as all those would now become part of the package names which is real yucky.

Question is, is there a way to specify an exact URL so that you can separate the package names and the URL? In other words, I'm looking for something like

go get -u github.com/foo/bar https://github.com/foo/bar/src/main/go

(of course the package names should match those that are actually in the source, otherwise it won't compile).

I looked at the go documentation, but it isn't clear to me whether this is doable.

duanlun2827
duanlun2827 回购中的路径和导入路径相同的事实严格来说是工具遵循的约定。能够从github获取是一种便利,如果您想要这种便利,则必须遵循约定。您可以通过插入诸如gopkg.in之类的中间服务器来或多或少地透明地进行更改,但这不会改变导入路径的工作方式。您可以自由地将代码移动到所需的任何位置并重写导入,这当然会破坏该代码的其他用户,但是您假设的go会得到需要不同导入的示例。
大约 3 年之前 回复
doudou521125
doudou521125 我通常同意您想要每种语言的回购协议。在这种特定情况下,存储库主要是基于protobuf的API。显然,我们具有用于消息定义的原始文件。我们有支持我们支持的语言的代码生成源。如果我们支持N种语言,那么我们将需要创建N+1个仓库(一个用于原始文件,一个N用于所有语言)。因此,关于如何将其组织到单个回购中的问题仍然存在。
大约 3 年之前 回复
duandi8613
duandi8613 没有理由将多种语言的库都放在同一个仓库中。它们每个都应位于各自的存储库中。
大约 3 年之前 回复
drvfqr5609
drvfqr5609 考虑将Go软件包(以及任何其他独立零件)制作为自己的项目和存储库。这样可以避免很多问题。进行另一个回购,以在必要时将它们与子模块组合在一起。甚至更好的是,使用包装工具将各部分组合在一起。
大约 3 年之前 回复
dswy34539
dswy34539 导入路径是包代码的路径。这是go工具遵循的约定。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问