go mod

最后更新于:2022-04-02 02:51:55

[TOC] ## 概述 2. 开启模块后,项目不能在 `GOPATH`中,否则会报错 ``` $GOPATH/go.mod exists but should not ``` ## 命令行 ``` Usage: go mod [arguments] The commands are: download 下载依赖的module到本地cache edit 编辑go.mod文件 graph 打印模块依赖图 init 再当前文件夹下初始化一个新的module, 创建go.mod文件 tidy 增加丢失的module,去掉未用的module) vendor 将依赖复制到vendor下 verify 校验依赖 why 解释为什么需要依赖 ``` ## 设置环境 ``` GO111MODULE=off go 会从GOPATH和vendor文件夹寻找包。 GO111MODULE=on go 会忽略 GOPATH 和 vendor 文件夹,只根据go.mod下载依赖 GO111MODULE=auto 当项目在$GOPATH/src外,且项目根目录有go.mod文件时,开启模块支持 ``` ## 实例 ### 初始化项目 ``` go mod init github.com/idcpj/xxx #初始化 go.mod 文件 ``` > 会在 go.mod 中生成响应模块,如果出现需要翻墙`export GOPROXY=https://goproxy.cn` ### 依赖包放入项目的`vender` ``` go build -mod=vendor antbiz.go ``` ### replace 替换 mod 在 build 出错的情况 `go mod edit -replace github.com/golang/net="golang.org/x/net@latest` 可在 `go.mod` 中生成 `replace golang.org/x/net => github.com/golang/net latest` 在执行 `go build main.go` 即可 ``` replace ( golang.org/x/tools => github.com/golang/tools v0.0.0-20190903163617-be0da057c5e3 golang.org/x/net => github.com/golang/net v0.0.0-20190827160401-ba9fcec4b297 ) ``` ### go mod tidy -go=1.17 对 go.mod 引入分成 直接引入和间接引入 ``` require ( github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 github.com/asim/go-micro/plugins/registry/consul/v4 v4.0.0-20220118152736-9e0be6c85d75 github.com/asim/go-micro/plugins/wrapper/breaker/hystrix/v4 v4.0.0-20220118152736-9e0be6c85d75 ... ) require ( github.com/Microsoft/go-winio v0.5.1 // indirect github.com/ProtonMail/go-crypto v0.0.0-20220113124808-70ae35bab23f // indirect github.com/acomagu/bufpipe v1.0.3 // indirect ... ) ```
';