Go1.16开发MQTT项目找不到paho.mqtt.golang依赖包问题
问题原因
- Go 1.16版本默认将
GO111MODULE值为on,默认启用Go Modules依赖管理机制,不再优先使用GOPATH路径查找依赖。 - 未在项目目录初始化
go.mod文件时直接运行代码,模块模式下无法识别依赖归属,就会触发「未找到go.mod文件、无对应模块提供包」的报错。 - 手动切换
GO111MODULE=off启用GOPATH模式时,依赖查找逻辑要求所有第三方包必须存放在$GOPATH/src对应路径下;而模块模式下执行go get/go install下载的依赖默认存放在$GOPATH/pkg/mod缓存目录,不会自动写入src目录,因此GOPATH模式下也找不到对应包。
解决方案
方案1:使用Go Modules(官方推荐,适配所有Go 1.11+版本)
- 进入
foobar.go所在的项目根目录,执行模块初始化命令:go mod init 自定义模块名,示例:go mod init mqtt-test - 执行依赖拉取命令:
go get github.com/eclipse/paho.mqtt.golang - 直接运行代码即可正常识别依赖:
go run foobar.go
方案2:继续使用GOPATH模式
如果需要沿用旧的依赖查找逻辑,按以下步骤操作:
- 全局设置关闭Go禁用模块开关为off:
go env -w GO111MODULE=off - 手动创建依赖存放路径:
mkdir -p $GOPATH/src/github.com/eclipse - 切换到对应路径克隆依赖仓库:
cd $GOPATH/src/github.com/eclipse && git clone https://github.com/eclipse/paho.mqtt.golang.git - 确保你的项目代码也存放在
$GOPATH/src目录下的对应路径,再执行go run foobar.go即可正常运行。
内容的提问来源于stack exchange,提问作者Kevin Riordan
相关产品推荐
相关产品推荐

