# Go Modules 配置 & 命令

# 初始化行为

# 创建项目目录
$ mkdir go-gin-example && cd go-gin-example
# 打开go modules开关(目前在1.18中默认值为 auto)
$ go env -w GO111MODULE=on
# 设置goproxy代理,解决国内外网访问不了导致的包下载不了的问题  该配置有两个参数,
# 第一个是 https://goproxy.cn,它是由七牛云背书的一个强大稳定的 Go 模块代理,可以有效地解决你的外网问题;
# 第二个是 direct,它是一个特殊的 fallback 选项,它的作用是用于指示 Go 在拉取模块时遇到错误会回源到模块版本的源地址去抓取(比如 GitHub 等)。
$ go env -w GOPROXY=https://goproxy.cn,direct
# 初始化Modules 它将会生成 go.mod 文件,需要注意的是 MODULE_PATH 填写的是模块引入路径,你可以根据自己的情况修改路径。
$ go mod init github.com/fbbyqsyea/go-gin-example

# 基础使用

# go get 拉去最新的依赖
# 拉取最新的版本(优先选取的tag)
$ go get golang.org/x/text@latest
# 拉取master分支的最新commit
$ go get golang.org/x/text@master
# 拉取tag指定版本的commit
$ go get golang.org/x/text@v0.1.2.3
# 拉取 hash 为 342b231 的 commit
$ go get golang.org/x/text@342b231
# 更新现有的依赖
$ go get -u

# 下载go.mod文件中指明的所有依赖
$ go mod download
# 整理现有的依赖
$ go mod tidy
# 查看现有的依赖结构
$ go mod graph
# 初始化go.mod文件
$ go mod init moduleName
# 编辑go.mod文件
$ go mod edit
# 导出现有的所有依赖 (事实上 Go modules 正在淡化 Vendor 的概念)
$ go mod vendor
# 校验一个模块是否被篡改过
$go mod verify

# go.sum

go.sum 文件详细罗列了当前项目直接或间接依赖的所有模块版本,并写明了那些模块版本的 SHA-256 哈希值以备 Go 在今后的操作中保证项目所依赖的那些模块版本不会被篡改。

# go.mod

go.mod文件是启用go modules的项目所必需的最重要的文件,他描述了当前模块的元信息,每一行以一个动词开头,目前有以下5个动词。

module:用于定义当前项目的模块路径
go:用于设置预期的go版本
require:用于设置一个特定的模块版本
exclude:用于从使用中排除一个特定的模块版本
replace:用于将一个模块版本替换为另一个模块版本