go env -w GOBIN=/Users/eli/go/bin go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
go env
GO111MODULE:
on: 强制使用modules, 不再去GOPATH下查找
off: 不使用modules,去GOPATH和vendor下查找
auto: 默认值,如果当前目录下有go.mod文件,则使用modules
1.2 基础命令
1 2 3 4 5 6 7 8 9 10 11 12
go help mod
go mod <command> [arguments]
download download modules to local cache edit edit go.mod from tools or scripts graph print module requirement graph init initialize new module in current directory tidy add missing and remove unused modules vendor make vendored copy of dependencies verify verify dependencies have expected content why explain why packages or modules are needed
1.3 基本使用
1.3.1 初始化
1 2 3
go mod init github.com/elihe2011/gomod
go get -u github.com/gin-gonic/gin
生成的文件:
go.mod: 模块管理文件
module语句: 指定包的名字(路径)
require语句: 指定的依赖项模块
replace语句: 可以替换依赖项模块
exclude语句: 可以忽略依赖项模块
go.sum: 记录依赖看的版本和哈希值
解决获取包时的代理错误:
1 2 3 4 5 6 7 8
$ go get -u github.com/gin-gonic/gin
go get github.com/gin-gonic/gin: module github.com/gin-gonic/gin: Get "https://proxy.golang.org/github.com/gin-gonic/gin/@v/list": dial tcp 34.64.4.113:443: i/o timeout
# go包管理,默认使用的是proxy.golang.org,在国内无法访问,换为 go env -w GOPROXY=https://goproxy.cn,direct # 七牛云
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
1.3.2 下载指定版本的依赖库
1 2 3 4 5 6 7 8 9 10 11
# 当前模块和支撑包 go list -m all
# 可用版本 go list -m -versions github.com/gin-gonic/gin
# 删除无效的modules go mod tidy
# 获取指定版本 go get github.com/gin-gonic/gin@
1.4 编译打包
1.4.1 使用GOPATH模式进行打包
1 2 3
export GO111MODULE=off export CGO_ENABLED=0 go build -a -v -o app main.go
1.4.2 使用vendor目录下包来进行打包
1 2 3
export GO111MODULE=on export CGO_ENABLED=0 go build -mod=vendor -a -v -o app main.go