Go Modules依赖管理

191 阅读1分钟

基本命令

  • go mod init 初始化项目,生成go.mod文件,后面可加上参数给项目命名
  • go mod download 根据go.mod文件下载所有依赖
  • go mod tidy 整理所有依赖
  • go mod graph 查看依赖关系

更改代理

go env -w GOPROXY=https://goproxy.cn,direct

可以添加多个代理,用英文逗号隔开,寻找模块时按照顺序查找,direct表示查找源头,如果代理处找不到,就到包的原始位置查找,例如github.com等。

go.mod文件

module github.com/xxx

go 1.21

require (
    example.com/apple v0.1.2
    example.com/banana v1.2.3 // indirect
)

exclude example.com/banana v1.2.4
replace example.com/apple v0.1.2 => example.com/fried v0.1.0 
replace example.com/banana => example.com/fish

indirect 表示间接依赖,项目中没有直接import,但是在import的module中使用了。

go get

  • go get 直接拉取不会更新
  • go get -u 更新依赖
  • go get xxx@latest 拉取最新版
  • go get xxx@master 拉取master分支最新commit
  • go get xxx@v0.0.1 拉取版本0.0.1 使用git tag实现
  • go get xxx@sfhsfds 根据哈希值拉取 在拉取时,如果不给定版本,那么会根据拉取的module的仓库tag。如果发布过tag,则选择最新的tag,否则就找主分支的最新commit。 在主版本号为v0和v1的情况下,可以省略版本号,之后要加上版本号。
    v1.0.0 —— github.com/xxx/xxx
    v2.0.2 —— github.com/xxx/xxx/v2

语义化版本号

v1.2.3-pre
其中1是主版本号,表示大更新,api更改
2是次版本号,表示向下兼容的更新 3是修订好,指进行了fix

go list命令

go list [-f format] [-json] [-m] [list flags] [build flags] [packages]
go list -m -u all

-m 显示当前项目的所有依赖
-u 显示可以更新到的版本