【笔记】go语言--go语言的依赖管理
【笔记】go语言--go语言的依赖管理
GO语言的依赖管理
- 依赖的概念,依赖就是第三方的库,即别人已经做好的库
- 依赖管理的三个阶段 GOPATH,GOVENDOR, go mod
三个阶段 - GOPATH
GOPATH 默认在~/go(unix linux ) %USERPROFILE%\go(windows),坏处就是会不断地增加内容,以至于对其余功能造成影响
需要注意:是没有办法区分不同依赖的不同版本的
//go path 的一些命令
新建路径:export GOPATH=/Users/apple/Desktop/project/src
关闭电脑所有的 go env -w GO111MODULE = off
项目关闭 export GO111MODULE = offgo path
获取库 go get -u go.uber.org/zap
使用gopath对依赖的查找大致分为两个步:首先要去GOROOT下的src目录下查找,需要注意的是,gopath下必须建立src目录,然后去GOPATH下的src目录查找,如果找不到库的话,就要去看一下是不是对应的地方没有放好
每个项目都可以设置自己的gopath
问题:同一个目录下的两个工程依赖于不同版本的同一个库?
解决办法:针对GOPATH,在两个工程下放置各自的工程的对应版本的库,因为在编译时优先从各自的工作目录下查找对应的库。
单纯的GOPATH是不好处理的,此时也就引出了GOVENDOR
三个阶段 - GOVENDOR
- 每个项目有自己的vendor目录,存放第三方库
- 大量第三方依赖管理工具 : glide, dep, go dep,...
使用gopath+vendor对依赖的查找有三个步:首先去项目目录下的vendor目录查找,然后去GOROOT和GOPATH下的src目录下查找,一般来说依赖是下载到gopath目录,然后拷贝到项目下的vendor目录,可以使用依赖管理工具自动完成这个拷贝任务
三个阶段 - go mod
- 由go命令统一的管理,用户不必关心目录结构
- 初始化: go mod init
- 增加依赖: go get
//一些命令
新建mod :go mod init XXX
升级修改go.uber.org/zap v1.20.0版本:go get -u go.uber.org/zap@v1.12.0
清除掉不用的历史版本数据:go mod tidy
旧项目迁移:go mod init XXX,go build ./...;完成后vendor、glide等都可以删除了;
之前做过glide、dep之类的依赖管理,go mod 会自动迁移过来;
添加外部依赖的两个方法:1.使用go get;2.直接在代码中import依赖,然后build
//引用项目的包
import的路径 = go.mod下的module name + 包相对于go.mod的相对目录
目录的整理
- go build 构建当前目录,当前目录不允许多个main函数
- go build ./... 构建当前目录以及子目录,该方式不产生结果,只是检查编译
- go install ./... 产生编译结果,存放在gopath/bin目录下
您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接