2.23 Go之go mod包依赖管理工具使用详解

2.23 Go之go mod包依赖管理工具使用详解

go module

Go语言默认的依赖管理工具

使用module

  • 设置GOMODULE


设置GoModule

  • GOMODULE=off禁用go module,编译时会从GOPATHvendor文件夹中查找包;

  • GOMODULE=on启用 go module,编译时会忽略GOPATHvendor文件夹,只根据go.mod下载依赖;

  • GOMODULE=auto(默认值),当项目在 GOPATH/src 目录之外,并且项目根目录有go.mod文件时,开启go module

Windows下设置:

set GO111MODULE = on 或者 set GO111MODULE = auto

MacOS或者Linux下设置:

export GO111MODULE = on 或者 export GO111MODULE = auto

go mod命令

命令作用
go mod download 下载依赖包到本地(默认为 GOPATH/pkg/mod 目录)
go mod edit 编辑 go.mod 文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹,创建 go.mod 文件
go mod tidy 增加缺少的包,删除无用的包
go mod vendor 将依赖复制到 vendor 目录下
go mod verify 校验依赖
go mod why 解释为什么需要依赖

GOPROXY

proxy代理服务器。国内有防火墙存在,所以有些第三方包无法通过go get获取。所以需要设置GOPROXY通过中间代理商获取到相应的资源。

目前公开的代理服务器:

  • goproxy.io

  • goproxy.cn:(推荐)由国内的七牛云提供。

windows下设置:

go env -w GOPROXY=https://goproxy.cn,direct // 域名

MacOs或者Linux下设置:

export GOPROXY=https://goproxy.cn

使用go get下载指定版本的依赖包

执行go get命令,在下载依赖包的同时还可以指定依赖包的版本。

  • 运行go get -u命令会将项目中的包升级到最新的次要版本或者修订版本;

  • 运行go get -u=patch命令会将项目中的包升级到最新的修订版本;

  • 运行go get [包名]@[版本号]命令会下载对应包的指定版本或者将对应包升级到指定的版本。

go get [包名]@[版本号]命令中版本号可以是 x.y.z 的形式,例如 go get foo@v1.2.3,也可以是 git 上的分支或 tag,例如 go get foo@master,还可以是 git 提交时的哈希值,例如 go get foo@e3702bed2。

在项目中使用

使用Goland新建项目会初始化一个go.mod文件。go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控,go toolchain 会在各类命令执行时,比如go getgo buildgo mod等修改和维护go.mod文件。

go.mod提供了modulerequirereplaceexclude四个命令:

  • module语句指定包的名字(路径);

  • require语句指定的依赖项模块;

  • replace语句可以替换依赖项模块;

  • exclude语句可以忽略依赖项模块。

升级依赖:

使用命令go list -m -u all来检查可以升级的 package,使用go get -u need-upgrade-package升级后会将新的依赖版本更新到 go.mod * 也可以使用go get -u升级所有依赖

使用replace替换无法直接获取的package

modules可以通过在go.mod文件中使用replace指令替换成github上对应的库

replace (
   golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)

 

posted @   俊king  阅读(953)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示