我目前正在使用Golang进行私人项目(我是新手).
但我有一个问题,我不知道什么是定义import path
本地包的正确方法.
我和这个链接的作者有同样的感觉https://medium.com/@c9s/golang-the-annoying-remote-import-path-c6c7e76517e5
简而言之,如果我foo
在Github上主持一个项目.使用github.com/levin/foo
导入路径而不仅仅是我感觉很奇怪foo
.如果我将代码移动到Bitbucket或在AWS中托管我自己的git服务器,它不会导致太多的返工吗?
更糟糕的是,我可以重写我的代码以更改导入路径,但是人们如何使用我的代码通知更改回购?我觉得要求别人更新他们的代码是没有意义的.
我是Golang的新手,所以请随便说出"你的问题甚至无效".
你的问题的答案:
我不知道为本地包定义导入路径的正确方法是什么.
正如@JimB所说:
如果要使用Go工具,则需要遵循约定.如果你想去上班,那么你需要用全名导入它,否则把它放在GOPATH的任何地方
因此,github.com/levin/foo
如果您想要go get
工作,则需要使用完整的导入路径,如果您希望其他人使用您的包,您应该这样做.
你的第二个问题的答案:
如果我将代码移动到Bitbucket或在AWS中托管我自己的git服务器,它不会导致太多的返工吗?
有一种方法可以使用自定义域名作为导入路径,并且仍然可以在任何地方托管您的代码,我认为它被称为虚荣导入路径.您只需要在您使用的导入文件中提供的html文件中添加一些元标记.
此文章解释了如何做到这一点,但总的看来,在得到您的自定义域提供当访问自定义导入路径的文件中,你需要添加一个go-import
指向到您托管代码元标记.本文使用github.com/foo/bar
您托管代码的位置示例和foo.com/bar
实际导入路径.
因此,在访问时提供服务的文件中foo.com/bar
应该有一个这样的元标记:
<meta name="go-import" content="golang.org/x/tools git http://github.com/foo/bar">
Run Code Online (Sandbox Code Playgroud)
并继续在github中托管您的代码.然后,如果您将托管位置更改为代码,则只需更改元标记的值,但使用该包的所有代码将继续使用完全相同的导入路径"foo.com/bar
.
唯一的问题是,现在您的项目可以通过2个不同的路径导入:foo.com/bar
和github.com/foo/bar
.要解决此问题,他们有 规范导入,只允许使用自定义路径而不是github导入包,它只在每个包文件的包名旁边添加注释:
package bar // import "foo.com/bar"
Run Code Online (Sandbox Code Playgroud)
这是避免问题的唯一方法.如果您正在使用仅在本地使用的包,则可以使用@srxf应答只知道go工具不能使用该代码(例如go get
).如果您希望代码按预期工作,那么这就是要走的路.
作为评论,我知道github.com/levin/foo
对于本地软件包感觉很傻,但是如果你在另一个软件包中使用该软件包(比如说foo2
)和其他人导入foo2
,这可以让编译器准确知道从哪里获取依赖项foo2
,因为所有导入在代码中包括整个路由,而不是本地文件的名称.通过这种方式,人们可以随时获得包所需的依赖关系,而无需在回购中包含这些文件,也无需为其配置任何内容.它并不完美,但它是可行的方式,它们称之为约定优于配置或类似的东西.