3.2 依赖管理 - hairyOwl/golangLearn GitHub Wiki
一 依赖
- 依赖 可以是第三方库
- 依赖管理的三个阶段 GOPATH, GOVENOOR, go.mod
1.1 GOPATH
- 默认在~/go(unix, linux) ,
%USERPROFILE%\go (windows) - 所有项目的依赖都在gopath , import 依赖后编辑器自行寻找
- GOPATH文件夹下必须包含子文件夹src 用来存放项目代码
go env --会输出go的环境配置
go env -w /temp/gopath --在全局上修改 gopath 为指定目录
export GOPATH= /temp/gopath --临时修改 gopath只对当前终端窗口生效
export GO111MODULE= off --强制 Go 表现出 GOPATH 方式,即使你的项目不在 GOPATH 目录里。
go get -u go.uber.org/zap --拉取第三方库 依赖文件存放目录是 [gopath]/src/go.uber.org/zap/xxx.go
1.2 GOVENOOR
- 每个项目有自己的vendor目录存放第三方库
- 大量依赖第三方管理工具:glide、dep......
- venodr文件夹可以解决不同项目同一第三方库本冲突的问题
1.3 go.mod
- 由go 命令统一管理,用户不必关心项目的目录结构
- 初始化 go mod init
- 增加依赖 go get
- 更新依赖 go get 【@v】 go mod tidy
- 项目迁移为go mod : go mod init go build ./...
1.3.1准备
- 在Terminal拉取第三方库
go get -u go.uber.org/zap
- 拉取后 go.mod文件,新增go.sum文件
module 4_gomodtest
go 1.20
require (
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.25.0 // indirect
)
- 依赖库存放位置
GOPATH\pkg\mod\go.uber.org\[email protected]\xxxx.go
1.3.2 依赖管理
依赖库的版本管理
go get -u go.uber.org/[email protected] //老版本
go mod tidy //清理后go.sum文件没有v1.25的东西
go get -u go.uber.org/zap //最新的版本
添加其他依赖库
go get
或者在import 上手写库,gomod会自动引用
旧的项目迁移到go.mod
go mod init 【module名字】
导入文件所有的依赖
go build ./... 当前目录及其所有子目录
二、目录管理
含有main函数的文件最好单独一个目录
go bulid ./...
go install ./... //生成的文件在 gopath/bin
BUG 🐞
- warning: GOPATH set to GOROOT (D:\codenv\go1.20.5) has no effect 解决:不在编辑器的Terminal 执行 go env 。用系统的终端执行 go env