vendor
vendor
概念最早是由Keith提出,用来存放依赖包。在版本1.5出现。例如gb项目提供了一个名为gsftp
的示例项目,它有一个gsftp
程序,在标准库之外有三个依赖项。golang.org/x/crypto/ssh
, golang.org/x/crypto/ssh/agent
和github.com/pkg/sftp
。按vendor
概念调整的目录结构如下:
$GOPATH
| src/
| | github.com/constabulary/example-gsftp/
| | | cmd/
| | | | gsftp/
| | | | | main.go
| | | vendor/
| | | | github.com/pkg/sftp/
| | | | golang.org/x/crypto/ssh/
| | | | | agent/
文件github.com/constabulary/example-gsftp/cmd/gsftp/main.go
的引用如下所示,看起来和平时的引用没什么区别。
import (
...
"golang.org/x/crypto/ssh"
"golang.org/x/crypto/ssh/agent"
"github.com/pkg/sftp"
)
因为github.com/constabulary/example-gsftp/vendor/golang.org/x/crypto/ssh
存在,且正在编译的文件位于以github.com/constabulary/example-gsftp
为根的子树中。则导入语句