Go语言中的go.mod与go.sum

server/2024/10/20 5:39:40/

问题1:什么是go.mod以及它是用来解决什么问题的?

go mod 是 Go 语言引入的包管理工具,用于解决 Go 语言项目在依赖管理方面的问题。

传统上,若不使用go mod,则需要要通过GOPATH来管理依赖,而这种方式存在一些问题:

如1. 包管理依赖不明确

2. 依赖库的版本管理

3. 需要手动管理同步依赖的复杂性等

而go mod可以帮助开发者在项目中明确管理依赖的版本、自动下载依赖、提供依赖版本的更新与回退等功能,从而改善Go语言的包管理体验。

类似于其他语言中,如JAVA则采用maven来管理依赖、Python的pip以及PHP的Composer等。

问题2:go.sum的作用以及为什么要把go.mod和go.sum分开

为了确保一致性构建,Go引入了go.mod文件通过哈希值来标记每个依赖包的版本,在构建过程中go命令会下载go.mod中的依赖包,下载的依赖包会缓存在本地,以便下次构建。

考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一个go.mod文件并不能保证一致性构建。

为了解决Go module的这一安全隐患,Go开发团队在引入go.mod的同时也引入了go.sum文件,用于记录每个依赖包的哈希值。

在构建时,如果本地的依赖包hash值与go.sum文件中记录得不一致,则会拒绝构建。

因此,该文件记录了每个依赖模块的校验和,用于确保依赖的安全性和可重现性。在执行 go build 或 go run 时,Go 会检查 go.sum 文件以确保依赖的完整性。

同时,由于这两个文件分别负责不同的分工:区分模块信息和依赖校验信息,来确保项目的依赖管理的准确性和安全性,要把它们放在不同的文件。


http://www.ppmy.cn/server/53240.html

相关文章

spring之HelloWord版

目录 基础结构说明 涉及到的功能 执行流程 spring包 引导类 bean定义 注解 回调接口拓展 测试入口 service包 回调接口拓展实现 实体类 自定义注解 基础结构说明 spring子包内,放置spring源码相关类,如注解定义,引导类执行逻辑等…

IIC学习笔记(立创STMF4开发板)

目录 #I2C涉及相关知识 #I2C相关介绍 欢迎指正,希望对你,有所帮助!!! 个人学习笔记,参考文献,链接最后!!! #I2C涉及相关知识 SDA串行数据线: Ser…

Interview preparation--elasticSearch正排索引原理

正排索引 ElastciSearch 适合做或者说擅长做全文检索,在做全文检索的时候,他会通过生成倒排索引的方式来辅助查询,生成一个词项到 文档id的一个倒排表,这样直接通过 词项可以快速找到所有的 稳定信息。 但是并不是所有的搜索都是…

淘客返利系统的分布式事务处理

淘客返利系统的分布式事务处理 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨如何在淘客返利系统中实现分布式事务处理,确保系统的数…

通过代理从ARDUINO IDE直接下载开发板包

使用免费代理 实现ARDUINO IDE2.3.2 下载ESP8266/ESP32包 免费代理 列表 测试代理是否可用的 网站 有时,代理是可用的,但依然有可能找不到开发板管理器的资料包。 可以多换几个代理试试。 代理的配置 文件 -> 首选项 -> 网络 进入后做如下配置…

基于weixin小程序农场驿站系统的设计

管理员账户功能包括:系统首页,个人中心,农场资讯管理,用户管理,卖家管理,用户分享管理,分享类型管理,商品信息管理,商品类型管理 开发系统:Windows 架构模式&…

WPF----自定义滚动条ScrollViewer

滚动条是项目当中经常用到的一个控件&#xff0c;大部分对外项目都有外观的需求&#xff0c;因此需要自定义&#xff0c;文中主要是针对一段动态的状态数据进行展示&#xff0c;并保证数据始终在最新一条&#xff0c;就是需要滚动条滚动到底部。 1&#xff0c;xaml中引入 <…

微信小程序自定义指令

微信小程序自定义指令 在微信小程序开发中&#xff0c;自定义指令&#xff08;Custom Directive&#xff09;是一种强大的工具&#xff0c;它允许开发者在页面的模板中编写复用性高、逻辑清晰的代码片段&#xff0c;用于处理视图层的逻辑和交互。通过自定义指令&#xff0c;开发…