如何习惯改变go github导入路径?

时间:2016-04-21 00:22:48

标签: go sed

我从github导入了一个应用程序,它有很多导入,分布在几个文件中:

import (
    "log"
    "net/http"
    "github.com/johndoe/sleekrest/model"
    "github.com/johndoe/sleekrest/shared/passhash"
    "github.com/johndoe/sleekrest/shared/recaptcha"
    "github.com/johndoe/sleekrest/shared/session"
    "github.com/johndoe/sleekrest/shared/view"
    "github.com/johndoe/csrfbanana"
)

我想在我的本地路径/go/src/myrest上处理这些包,所以我希望将导入设置为

import (
    "log"
    "net/http"
    "./model"
    "./shared/passhash"
    "./shared/recaptcha"
    "./shared/session"
    "./shared/view"
    "./csrfbanana"
)

我知道我可以使用像sedfind之类的bash命令来替换导入路径,但我想知道在golang中是否有一种惯用的方法吗?< / p>

1 个答案:

答案 0 :(得分:2)

没有惯用的方法,因为相对导入路径不是惯用的Go。

不使用相对导入路径的原因

以下内容来自Organizing Go code

  

导入路径是用户导入包的字符串。它指定了程序包源代码所在的目录(相对于$GOROOT/src/pkg$GOPATH/src)。

     

有时人们将GOPATH设置为其源存储库的根目录,并将其包放在相对于存储库根目录的目录中,例如&#34; src/my/package&#34;。一方面,这会使导入路径变短(&#34; my/package&#34;而不是&#34; github.com/me/project/my/package&#34;),但另一方面它会破坏强制用户重新设置GOPATH以使用该包。不要这样做。

以下内容来自Command go

  

其次,如果您正在编译不在工作空间中的Go程序,则可以在该程序的import语句中使用相对路径来引用附近的代码,而不是在工作空间中。这样可以很容易地在通常的工作空间之外试验小型多包装程序,但是这些程序不能与go install一起安装(没有安装它们的工作空间),因此每次都从头开始重建它们它们是建造的。为避免歧义,Go程序无法在工作空间中使用相对导入路径。

另外,您可以查看这些StackOverflow答案:

Vendoring

供应成为Go 1.5的实验性功能。从Go 1.6开始,售卖不再是实验性的。有关vendoring的更多信息,请参阅: