ICode9

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

入门golang中的module理解go.mod和go.sum

2021-12-28 09:33:33  阅读:843  来源: 互联网

标签:依赖 vendor 版本 sum module 模块 go mod


翻译自 https://faun.pub/understanding-go-mod-and-go-sum-5fd7ec9bcc34

在这篇博客中,我将尝试介绍go模块的基本原理,以及GoLang项目中的依赖管理是如何工作的。


我将尝试解释一些常用的命令,如go mod tidy,go mod vendor,以及GoLang中的mod cache。


go.mod文件是GoLang中依赖管理的根基。所有在项目中需要或使用的模块都在go.mod文件中维护。

对于所有我们要在项目中导入/使用的包,它将在go.mod中创建这些模块的条目。

有了go.mod文件,就省去了为每个依赖的模块运行go get命令来成功运行项目的麻烦。


(如果想安装一个特定的软件包,我们可以用go get命令来安装,例如:go get go.mongodb.org/mongo-driver)

 

go mod init - 创建一个新模块,初始化描述该模块的go.mod文件。开始时,它只在go mod文件中添加模块路径和go版本。

 

在第一次运行任何软件包构建命令,如go build、go test之后,它将安装所有具有特定版本的软件包,即当时的最新版本。

它还会创建一个go.sum文件来维护校验和,所以当你再次运行该项目时,它不会再次安装所有的包。

而是使用存储在$GOPATH/pkg/mod目录(模块缓存目录)中的缓存。
go.sum是一个生成的文件,你不需要编辑或修改这个文件。
现在go.mod已经添加了所有在 "require "节点上有版本的模块,一个go.mod的样本文件看起来是这样的。

 

"module"意味着为版本控制而维护的网址,即模块声明。
go 1.14是本项目使用的golang版本,是创建go mod时的最新版本。
"require"将包括所有依赖模块和我们将在项目中使用的相关版本


"replace"指向Go中某个依赖模块的本地版本,而不是git-web。

它将创建一个有可用版本的vendor的本地副本,所以当我们想引用该vendor时,不需要每次都安装。

"//indirect"意味着我们在项目中没有使用这些依赖,但有一些模块导入了这些依赖。
所有的横向依赖都是间接的,这些包括我们项目需要正常工作的依赖。

 

使用go mod tidy

它将绑定项目中的当前导入文件和go.mod中列出的包。go mod tidy确保go.mod文件与模块中的源代码相匹配。

它添加任何缺失的模块需求,以构建当前模块的包和依赖,如果有一些不使用的依赖,go mod tidy将相应地从go.mod中删除这些。
它还会在go.sum中添加任何缺失的条目并删除不必要的条目。

当我们升级go.mod中某个特定软件包的版本时,我们需要运行go mod tidy命令来更新go.sum中的校验和。

 

使用go mod vendor

 

它生成了一个带有可用版本的vendor目录。它把所有第三方的依赖关系复制到你的项目根目录下的vendor文件夹。
这将添加所有运行vendor包所需的过渡性依赖。
当vendoring被启用时,go命令将从vendor目录中加载包并使用那些下载的包,而不是从模块源下载模块到模块缓存中。

 

go clean -modcache


该命令用于清除保存在$GOPATH/pkg/mod的mod缓存。这条命令用来删除已安装的软件包。
-modcache标志会删除整个模块下载缓存,包括版本依赖的未打包的源代码。

标签:依赖,vendor,版本,sum,module,模块,go,mod
来源: https://www.cnblogs.com/browncrane/p/15739323.html

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

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

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

ICode9版权所有