14、go语言依赖管理

1、go依赖管理简介

go的依赖管理截止到目前经历了3个阶段:GOPATH、GOVENDOR、go mod

2、GOPATH管理代码

	GOPATH的管理方式其实就是把项目需要的所有代码都放在GOPATH中,本质上就是`不管理包`

	在 Go 1.8 版本之前,GOPATH 环境变量默认是空的。从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录,参见下表。

在这里插入图片描述
gopath下必须要有一个叫src的目录

	使用GOPATH是不会去中国镜像中拉取代码,大多数的包是会去github.org中拉取代码,会比较慢,但是还是能够成功的(golang.org上的代码是拉不下来的)

example

#先关闭go mod模式
go env -w GO111MODULE=off
#开始拉取代码,因为使用的是国外的镜像,所以会比较慢
go get -u go.uber.org/zap

3、GOVENDOR

每个项目都有一个vendor目录,用来存放第三方库

许多第三方依赖管理工具就是基于GOVENDOR诞生的,如glide、dep、go dep

实际开发中一般不会动vendor目录,而是改第三方依赖管理工具的配置文件

4、go mod

  • go mod由go命令统一的管理,用户不必关心目录结构

go mod example

1、使用goland创建项目

在这里插入图片描述
在这里插入图片描述

2、创建项目后,在根目录中有一个go.mod文件

sd

3、go env检查环境,确保GO111MODULE是开启的状态

在这里插入图片描述

4、因为go.mod不能与GOPATH共存,所以goland中不能设置Project GOPATH,否则会报错

在这里插入图片描述

5、使用go get命令拉取代码
go get -u go.uber.org/zap
6、拉取代码之后,go.mod文件会相应的进行改变

在这里插入图片描述

同时,go.mod下会有一个go.sum文件,该文件记录了每个库的版本以及hash,确保拉下来的库是没有被人篡改过的

在这里插入图片描述

7、写一个demo来运行一下,刚才拉取的库

在这里插入图片描述

运行完之后,go.mod文件中require中,使用到的库结尾的 (// indirect)会被删掉,表示库已经使用过了

在这里插入图片描述

go mod拉取包时,会将代码放在全局GO PATH/pkg/mod文件夹中

在这里插入图片描述

8、若需要使用其他的版本,那么就使用命令行执行版本下载
go get -u go.uber.org/zap@v1.11
9、此时会发现go.mod中的包变成了新下载的内容,同时go.sum中有之前版本以及最新下载版本的代码包声明

在这里插入图片描述
在这里插入图片描述

10、此时使用 go mod tidy命令可以将之前的代码包信息全部清除掉

在这里插入图片描述
在这里插入图片描述
虽然清洁掉了go.mod文件以及go.sum文件中的内容,但是之前下载的包还是存在GO ROOT/pkg/mod文件夹下面
在这里插入图片描述

11、go mod方式除了使用go get命令,还可以在写代码的时候直接import想要的代码包,再执行goland编译运行代码,此时go mod会去下载对应的代码包

初始化go mod

使用命令 go mod init

go mod增加依赖

增加依赖的两种方式

  1. 使用go get 依赖包名
  2. 代码中直接import要导入的依赖包名

go mod更新依赖

go get [依赖包名@v…]
更新依赖版本后,使用go mod tidy把多余的依赖去除

旧项目如何迁移到go mod中

如果有大量基于GOPATH和GOVENDOR的项目,此时就需要将项目迁移到go mod中

方式1. 在项目根目录下使用命令【go build ./…】表示将当前目录以及所有子目录的文件全部build一遍,这样在build时,每次碰到import关键字,就会触发go mod去镜像中拉取库,然后放在本地统一缓存中

方式2. 命令行使用go mod init modetest创建go.mod文件,然后再执行go build ./…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值