ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

go官方包依赖管理工具之mod

2022-03-31 10:00:51  阅读:171  来源: 互联网

标签:GOPATH GO111MODULE 依赖 vendor 管理工具 go mod


1.1、go mod是什么
go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。

之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,但现在官方更提倡go mod。

1.2、go mod初始化及使用
下载官方包1.11(及其以上版本将会自动支持gomod) 默认GO111MODULE=auto(auto是指如果在gopath下不启用mod)

Golang 提供一个环境变量 GO111MODULE 来设置是否使用mod,它有3个可选值,分别是off, on, auto(默认值),具体含义如下:

off:
 查找vendor和gopath目录

on:
 使用gomodule  忽略gopath目录

auto: 如果当前目录不在gopath目录并且当前目录下有go.md文件, 则使用GO111MODULE,否则使用GOPATH mode

修改 GO111MODULE 的值的语句是:set GO111MODULE=on

在使用模块的时候, GOPATH 是无意义的,不过它还是会把下载的依赖储存在 GOPATH/src/mod 中,也会把 go install 的结果放在 GOPATH/bin(如果 GOBIN 不存在的话)

go mod download
下载模块到本地缓存, 缓存路径:$GOPATH/pkg/mod/cache

go mod edit
提供了命令版编辑go.mod的功能, 例如  go mod edit -fmt go.mod 会格式化go.md

go mod graph 
把模块之间的依赖图展示出来

go mod init
初始化模块

go mod tidy
增加缺失的包, 移除无用的包

go mod vendor
把依赖拷贝到vendor目录下

go mod verify
确认依赖关系

go mod why
解释为什么需要包和模块

 

注意有几个坑的地方:

go mod 命令在 $GOPATH 里默认是执行不了的,因为 GO111MODULE 的默认值是 auto。默认在$GOPATH 里是不会执行, 如果一定要强制执行,就设置环境变量为 on。

go mod init 在没有接module名字的时候是执行不了的,会报错 go: cannot determine module path for source directory。可以这样执行:

go mod init github.com/lanlang/hello

 

更多命令:

# 查看module下的所有依赖
go list -m all

# 更新为执行版本依赖
go get rsc.io/sampler@v1.3.1

# 将依赖复制到项目目录vendor文件夹下
go mod vendor

# 忽略cache中的包, 只使用vendor目录中的依赖进行编译
go build -mod=vendor




# 开启module
windows:
set GO111MODULE=on

linux:
export GO111MODULE=on

 

标签:GOPATH,GO111MODULE,依赖,vendor,管理工具,go,mod
来源: https://www.cnblogs.com/xingxia/p/go_module.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有