【笔记】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目录下
posted @ 2022-02-08 19:02  DbWong_0918  阅读(344)  评论(0编辑  收藏  举报