golang笔记05--go语言的依赖管理
1 介绍
本文继上文 golang笔记04–golang 面向对象, 进一步了解 go语言的依赖管理和相应注意事项。
具体包括 :依赖管理、GOPATH 和 GOVENDOR、go mode的使用、目录的整理等内容。
2 go语言的依赖管理
2.1 依赖管理
依赖管理的三个阶段包括: GOPATH,GOVENDRO, go mod。
2.2 GOPATH 和 GOVENDOR
GOPATH:
GOPATH 默认在~/go 目录下面;以下案例直接通过idea的go来新建项目,项目存放在 /tmp/gopathtest/src 下面。
运行前需要在 Edit Configurations 的Go Build 中添加 Environment,值为 GO111MODULE=off,如下图所示:
GOVENDOR:
如果需要多个项目需要使用某个库的不同版本的情况,那么就可以使用govendor功能了,具体就是在每个项目下面新建一个vendor,然后将对应版本的库拷贝到vendor中,那么就会先去vendor下找对应的库文件,然后再去全局 gopath 的 src下找,最后会去非全局的 gopath 的 src下找。
2.3 go mod 的使用
go mod 相比gopath 和 govendor 更加高级,可以很方便的管理所需的库;
其由 go 命令统一管理,用户不必担心目录结构;
初始化直接使用 go mod init mode-name 即可;
追加依赖时直接使用 go get 即可;
在idea 中通过 go mod 新建 gomodtest项目,存储位置随意即可;
然后在cmd 中 go get -u go.uber.org/zap ,zap拉取完毕后可以发现 go.mod 中也更新了一些require的内容,而且会生成一个go.sum文件,如下图所示:
此时go 的 zap.NewProduction 会从go/pkg/mod/go.uber.org/zap@v1.16.0/logger.go 中查找,如下图。
使用 go mod 管理库后,如果项目需要更改依赖的版本,则直接在 go.mod 中修改require的库的版本号即可,在编译的时候会自动下载对应的版本。
如果旧项目迁移,在项目根目录下执行 go mod init 和 go build ./… 就会通过 go mod 的方式快速获取所有需要的依赖库。
2.4 目录的整理
对于项目目录和文件的规范性方面,可以通过 go build ./… 来检查是否有异常。
例如,同一个目录下多个文件都有package main,那么build会出错;
正确的做法是每个package 单独放在指定的目录中,如下图所示:
3 注意事项
- 使用gopath的时候,如果找不到指定的库,则会先到全局gopath的src下找,然后会在非全局的gopath的src下找。
4 说明
- 软件环境
go版本:go1.15.8
操作系统:Ubuntu 20.04 Desktop
Idea:2020.01.04