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
...
)
```
';