Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41031 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

特别放送 | Go Modules依赖包管理全讲

校验
go.sum文件生成
go.sum文件内容
go.mod文件修改方法
go.mod版本号
go.mod语句
off
on
auto
具有Global Caching特性
可以校验依赖包的哈希值,确保包的一致性,增加安全性
允许同一个模块多个版本共存
支持版本管理
可以使包的管理更加简单
Go在下载依赖包时,可以通过代理来下载,也可以指定版本号下载
有两个非常重要的文件:go.mod和go.sum
Go Modules提供了 go mod 命令
go.sum文件
go.mod文件
按最小版本下载
指定版本号下载
通过代理下载
GO111MODULE环境变量
why
verify
vendor
tidy
init
graph
edit
download
go.mod文件定义了模块的名称及其依赖包
模块是存储在文件树中的Go包的集合
Go1.11版本之后:Go Modules
Go1.9版本:Dep
“百花齐放”:多种Go依赖包管理工具出现
Go1.5版本:Vendoring
Go1.5版本前:GOPATH
Go Modules是Go官方推出的一个Go包管理方案
总结
模块下载流程
go.mod和go.sum介绍
模块下载
Go Modules开关
Go Modules 命令
包(package)和模块(module)
Go包管理的历史
Go Modules简介
Go Modules依赖包管理全讲

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。今天我们更新一期特别放送作为加餐。
在 Go 项目开发中,依赖包管理是一个非常重要的内容,依赖包处理不好,就会导致编译失败。而且 Go 的依赖包管理有一定的复杂度,所以,我们有必要系统学习下 Go 的依赖包管理工具。
这一讲,我会首先介绍下 Go 依赖包管理工具的历史,并详细介绍下目前官方推荐的依赖包管理方案 Go Modules。Go Modules 主要包括了 go mod 命令行工具、模块下载机制,以及两个核心文件 go.mod 和 go.sum。另外,Go Modules 也提供了一些环境变量,用来控制 Go Modules 的行为。这一讲,我会分别介绍下这些内容。
在正式开始讲解这些内容之前,我们先来对 Go Modules 有个基本的了解。

Go Modules 简介

Go Modules 是 Go 官方推出的一个 Go 包管理方案,基于 vgo 演进而来,具有下面这几个特性:
可以使包的管理更加简单。
支持版本管理。
允许同一个模块多个版本共存。
可以校验依赖包的哈希值,确保包的一致性,增加安全性。
内置在几乎所有的 go 命令中,包括go getgo buildgo installgo rungo testgo list等命令。
具有 Global Caching 特性,不同项目的相同模块版本,只会在服务器上缓存一份。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Go Modules是Go官方推出的包管理方案,具有版本管理、多版本共存、哈希值校验等特性。Go1.14版本后,Go官方建议在生产环境中使用Go Modules。文章介绍了Go包管理的历史,包括GOPATH、Vendoring、多种依赖包管理工具出现以及Go Modules的推出。Go Modules的命令包括download、edit、graph、init、tidy、vendor、verify和why。此外,文章还介绍了包和模块的概念,以及Go中的四种包类型。通过本文,读者可以快速了解Go Modules的特性和命令,以及Go包管理的发展历程。文章还介绍了Go Modules的环境变量GO111MODULE的设置,模块下载方式,包括通过代理下载、指定版本号下载和按最小版本下载。另外,还介绍了Go模块代理的好处以及如何设置私有模块的访问。最后,文章详细介绍了Go Modules中的两个重要文件go.mod和go.sum的作用。文章还详细介绍了go.mod文件的语句功能、版本号格式和修改方法,为读者提供了全面的Go Modules知识。文章还介绍了go.sum文件的内容、生成和校验流程,以及模块下载流程。总的来说,本文全面介绍了Go Modules的特性、命令和文件作用,为读者提供了深入了解Go包管理的机会。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • josephzxy
    置顶
    “思考下,如果不提交 go.sum,会有什么风险?” 如果go get时,GOSUMDB=off,就没有办法校验下载的包是否被篡改。 推荐两篇博文可做辅助阅读 https://zaracooper.github.io/blog/posts/go-module-tidbits/ https://insujang.github.io/2020-04-04/go-modules/

    作者回复: 老哥,回答给满分~

    2021-09-09
    3
    11
  • Juniper
    问下老师,go get和go mod download的场景有什么不一样吗,不太明天go mod download这个命令的场景

    作者回复: go get是下载单个包。 go mod download是下载go.mod中记录的包(1个/多个)

    2021-09-30
    3
  • types
    go get如何拉取指定分支的指定commit id

    作者回复: 还不支持指定commit id get

    2021-09-24
    2
  • 最后一个流程图中, GOSUMDB=off 的时候,还会和 go.sum 文件中的 hash 做对比吗?

    作者回复: 不会的

    2022-04-01
  • 开启 go module 的环境变量 GO1111MODULE 为什么中间有 3个1?

    作者回复: 应该是GO1.11的意思

    2022-04-01
  • 陈东
    goland构建module并引用方包logrus,能go run代码,但是logrus.Println 中的(Println )一直显示红色报错,尝试很多办法,解决 go构建约束问题,错误提示是Build constraints exclude all Go files in c:代码目录文件夹? 尝试以下办法解决不了 1、searcheverything 搜索后删除所有包, $GOPATH目录下,把对应的包删除,重新go get,还是不行. 2、go get -u -v github.com/karalabe/xgo 3、Right click -> Mark folder as not excluded. 4、引用包报错,重启电脑,查看goproxy配置,重装goland等等都解决不了。 怎么解决,希望得到老师帮助,谢谢。

    作者回复: 试试执行以下命令重新再构建下: export CGO_ENABLED=1 export GOOS=linux

    2021-12-18
  • yss
    如果不提交 go.sum,会有什么风险? 当别人使用项目并下载依赖时,无法验证他们使用的依赖和你开发时的依赖是否一致,存在下载到被篡改代码的风险

    作者回复: 对的,是这个风险。

    2021-10-28
  • types
    go build或者go run的时候,如果依赖包都已经下载到 pkg/mod下了,还会进行校验吗?? 自己测试了下已经是不会校验的

    作者回复: 不会校验的,缓存中的文件时只读的,所以只需要校验一次

    2021-09-24
  • helloworld
    “如果不指定版本号,Go Modules 会根据自定义的规则,选择最小版本来下载。”,这里说的最小版本指的是latest版本吗

    作者回复: 不是。 语义化版本号之间是可以对比的,比如:v1.1.1 < v1.1.2。 按语义化版本号对比规则对比后的最小值。

    2021-09-10
    4
  • 兔嘟嘟
    解惑了,整个中文互联网上都没这样好好讲go module的,至少我没找到。导致我一开始搞项目的时候,在某个地方纠结了好久
    2021-12-19
    4
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部