go modules 包管理

go modules

环境配置

1.13 以后

go env -w GOPROXY=https://goproxy.cn,direct
使用 go env -w 将环境变量加到配置文件中。和 .zshrc 或 .bash_profile 解耦

1.13以前

正确配置 GOROOT

# go
# export export GO111MODULE=on # 三个状态 off on auto ,v1.11默认为auto, v1.12 默认on. on表示必须使用module依赖,才在src/ 目录下可以使用module
export GOROOT="/usr/local/go"
export GOBIN="/Users/fanjinlong/go/bin"
# export GOPATH=/Users/username/code/go #工作区,存放go源码文件的目录
export PATH=$PATH:$GOROOT/bin:$GOBIN
# # export GOPROXY="https://mirrors.aliyun.com/goproxy/,direct"
# export GOPROXY=""
# export CGO_CFLAGS_ALLOW='-Xpreprocessor' #cgo

初始化 同时 确定了项目的绝对目录路径

go mod init v5u.win/projectapi
生成 go.mod
导入包:import "v5u.win/projectapi/src/app/service"

添加依赖

go mod tidy

生成 go.sum 自动添加依赖关系到 go.mod

go run main.go

下载依赖包

go mod download github.com/pelletier/go-toml

Tips:

  1. 不能在 golib/src 下创建项目
  2. 在 Go1.11 版本下,GOPATH 目录中的项目默认是禁用 Go Module 的,需要手动开启
  3. export GOPROXY=”https://athens.azurefd.net” // 微软提供的公共代理
  4. export export GO111MODULE=on // 必须使用module依赖,在src/ 目录下可以使用module

常用命令

go mod tidy //拉取缺少的模块,移除不用的模块。
go mod download //下载依赖包
go mod graph //打印模块依赖图
go mod vendor //将依赖复制到vendor下,目前貌似只会下载你代码中引用的库,而不是go.mod中定义全部的module。坑
go mod verify //校验依赖
go mod why //解释为什么需要依赖
go list -m -json all //依赖详情
go clean -modcache 清除缓存