Introduction to Go Modules – Roberto Selbach https://roberto.selbach.dev/intro-to-go-modules/
go mod使用 - 简书 https://www.jianshu.com/p/760c97ff644c
一个包管理工具应该有以下功能:
基本功能
- 依赖管理
- 依赖包版本控制
- 对应的包管理平台
- 可以私有化部署
加分:
- 代码包是否可以复用
- 构建,测试,打包
- 发布上线
没有使用go mod之前的问题。
使用go path问题
- 代码开发必须在go path src目录下,不然,就有问题。
- 依赖手动管理
- 依赖包没有版本可言
从这个看, go path不算包管理工具
govendor
- 解决了包依赖,一个配置文件就管理
- 依赖包全都下载到项目vendor下,每个项目都把有一份。拉取项目时,开始怀疑人生。
go mod介绍
go modules 是 golang 1.11 新加的特性。现在1.12 已经发布了,是时候用起来了。Modules官方定义为:
模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
go mod 有以下命令:
命令 | 说明 |
---|---|
download | download modules to local cache(下载依赖包) |
edit | edit go.mod from tools or scripts(编辑go.mod) |
graph | print module requirement graph (打印模块依赖图) |
verify | initialize new module in current directory(在当前目录初始化mod) |
tidy | add missing and remove unused modules(拉取缺少的模块,移除不用的模块) |
vendor | make vendored copy of dependencies(将依赖复制到vendor下) |
verify | verify dependencies have expected content (验证依赖是否正确) |
why | explain why packages or modules are needed(解释为什么需要依赖) |
比较常用的是 init
,tidy
, edit
go get升级
- 运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
- 运行 go get -u=patch 将会升级到最新的修订版本
- 运行 go get package@version 将会升级到指定的版本号version
- 运行go get如果有版本的更改,那么go.mod文件也会更改
使用replace替换无法直接获取的package
由于某些已知的原因,并不是所有的package都能成功下载,比如:golang.org下的包。
modules 可以通过在 go.mod 文件中使用 replace 指令替换成github上对应的库,比如:
replace (
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
GO111MODULE
GO111MODULE 有三个值:off, on和auto(默认值)。
GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
作者:若与
链接:https://www.jianshu.com/p/760c97ff644c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
module declares its path as: go.etcd.io/bbolt,but was required as: github.com/coreos/bbolt · Issue #11749 · etcd-io/etcd https://github.com/etcd-io/etcd/issues/11749
cat go.mod
module Test
go 1.16
replace (
github.com/coreos/bbolt => go.etcd.io/bbolt v1.3.5
go.uber.org/atomic => github.com/uber-go/atomic v1.5.0
google.golang.org/grpc => google.golang.org/grpc v1.29.1
)
require (
github.com/PuerkitoBio/goquery v1.6.1
github.com/aliyunmq/mq-http-go-sdk v1.0.3
github.com/cloopen/go-sms-sdk v0.0.0-20200702015230-7c5619f80c9e
github.com/coreos/bbolt v0.0.0-00010101000000-000000000000 // indirect
github.com/coreos/etcd v3.3.25+incompatible // indirect
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
github.com/go-kratos/kratos v1.0.0
github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c // indirect
github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 // indirect
github.com/gogo/protobuf v1.3.2
github.com/golang/protobuf v1.5.2
github.com/google/wire v0.5.0
github.com/qiniu/api.v7/v7 v7.8.2
github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726
github.com/valyala/fasthttp v1.24.0 // indirect
go.etcd.io/etcd v3.3.25+incompatible
go.mongodb.org/mongo-driver v1.5.1
google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab
google.golang.org/grpc v1.36.1
)