我从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"
)
我知道我可以使用像sed
,find
之类的bash命令来替换导入路径,但我想知道在golang中是否有一种惯用的方法吗?< / p>
答案 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答案:
供应成为Go 1.5的实验性功能。从Go 1.6开始,售卖不再是实验性的。有关vendoring的更多信息,请参阅: