创建了一个包,将其移至GOPATH/src
一切都已安装并正常工作。
但是我这个项目只需要这个包,把所有东西都拖进去GOPATH/src,这样的一次性包还是会有很多,因为没有欲望。
除了GOPATH在与项目合作之前重新定义之外,还有其他出路吗?
来自@sanmai 的 UPD
选项 cvendor
$ pwd
/Users/borodatych/Desktop/vendoring-example-master
$ go run main.go
main.go:4:2: cannot find package "example.com/example" in any of:
/usr/local/go/src/example.com/example (from $GOROOT)
/Users/borodatych/go/src/example.com/example (from $GOPATH)
$ go env
....
GOPATH="/Users/borodatych/go"
....
$ go version
go version go1.9 darwin/amd64
没有 GOPATH,Go 将无法工作。根据定义。你只需要将你的代码放在至少一些 GOPATH 中。因此,使用供应商。文档中的完整描述。
为此,请
vendor在项目中创建一个目录,在其中添加您想要的任何内容以及完整路径,然后您就完成了。你GOPATH/src的将是干净和无云的:它只包含你的主要项目。所有导入的工作都好像对每个人来说都是通用的src。逻辑是这样的:如果有一个 import
example,那么我们首先在 in 中查找它,vendor然后才在 in 中查找它GOPATH/src。对于每个嵌套项目也是如此。例如,这里
main.go所以
vendor/example.com/example/example.go所以
vendor/example.com/example/vendor/test.ru/world/world.goGitHub 上的完整示例。Travis 的所有测试都通过了:
你可以这样检查:
或者像这样:
最后,你可以有多个 GOPATH:
在这种情况下,可能会出现各种困惑,但如果你准备好了,一切都会迎刃而解。
您可以为 go,godoc,gofmt 编写包装器,它将查看它们的启动路径,基于此,每次重新定义 GOPATH 并调用实际命令。我有这样的经历,包装器是不同的——无论是在 bash 上还是在路上。一般来说,它运作良好,当时我为每个项目都有一个单独的 GOPATH。然后,随着 vendoring 的引入,我开始用它来拖拽依赖,把所有东西都放在通用的 GOPATH 中。
您也可以将包放在 GOPATH/src/github.com/you/project/vendor/abc 中,但如果您想编辑包并同时使用诸如 godep 之类的东西,可能会遇到困难。
GOPATH / src 中的一堆包不再困扰我 - 好吧,安静地躺着,让它们躺着。
如果是您自己的代码,那么最好使用嵌套项目 AKA 模块 AKA 包。
例如,这里
project/main.go所以
project/example/example.go因此,同时,某些部分将位于单独的位置,并且将在同一个项目中。查看其他项目的结构或标准库的结构。