Go外部依赖包从vendor、$GOPATH和$GOPATH/pkg/mod下的查找顺序

本文介绍了Go语言项目中外部依赖包的查找顺序,从`vendor`目录开始,按照层级搜索,然后是`GOPATH`中的`pkg/mod`,详细解析了`vendor`的搜索规则以及`modules`的引入与使用,最后阐述了在启用`GO111MODULE=on`时,`vendor`、`GOPATH/pkg/mod`的优先级问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vendor

vendor概念最早是由Keith提出,用来存放依赖包。在版本1.5出现。例如gb项目提供了一个名为gsftp的示例项目,它有一个gsftp程序,在标准库之外有三个依赖项。golang.org/x/crypto/ssh, golang.org/x/crypto/ssh/agentgithub.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为根的子树中。则导入语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值