学习记录
- [1 依赖管理 Go Modules](#1 依赖管理 Go Modules)
-
- [1.1 弃用 $GOPATH](#1.1 弃用 $GOPATH)
- [1.2 Go Modules 日常使用](#1.2 Go Modules 日常使用)
-
- [1.2.1 初始化生成go.mod文件](#1.2.1 初始化生成go.mod文件)
- [1.2.2 Go Proxy代理](#1.2.2 Go Proxy代理)
- [1.2.3 go.mod文件查看](#1.2.3 go.mod文件查看)
- [1.2.4 go.sum文件查看](#1.2.4 go.sum文件查看)
- [1.2.5 indirect 含义](#1.2.5 indirect 含义)
- [1.2.6 go mod tidy 命令](#1.2.6 go mod tidy 命令)
- [1.2.7 清空 Go Modules 缓存](#1.2.7 清空 Go Modules 缓存)
- [1.2.8 下载依赖](#1.2.8 下载依赖)
- [1.2.9 所有 Go Modules 命令](#1.2.9 所有 Go Modules 命令)
- [1.2.10 相关环境变量](#1.2.10 相关环境变量)
- [2 补充](#2 补充)
-
- [2.1 git checkout .](#2.1 git checkout .)
- [2.2 遇到换行符警告](#2.2 遇到换行符警告)
1 依赖管理 Go Modules
1.1 弃用 $GOPATH
Go Modules 出现的目的之一就是为了解决 GOPATH 的问题。
在 $GOPATH 时代,Go 源码必须放置于 $GOPATH/src 下,抛弃 $GOPATH 的好处,是你能在任意地方创建的 Go 项目。
另外,$GOPATH 有非常落后的依赖管理系统。因在执行 go get 时,无法传达任何版本信息。
在构建 Go 应用程序上,我们无法保证其它人与你所期望依赖的第三方库是相同的版本(相同的代码),也就是说无法保证所有人的依赖版本都一致。
1.2 Go Modules 日常使用
1.2.1 初始化生成go.mod文件
go mod init
1.2.2 Go Proxy代理
因国内访问外网受限,一般我们都会配合 Go Proxy 使用,以防止使用 go get 获取源码包时花费时间过长或无法下载,安装 package 的原则是先拉最新的 release tag,若无 tag 则拉最新的 commit。
go env -w GOPROXY=https://goproxy.cn,direct
1.2.3 go.mod文件查看
每一次go get都会同时修改go.mod和go.sum文件
参数:
module ------ 我们的 goblog 在 Go Module 里也算是一个 Module ;
go ------ 指定了版本要求,最低 1.20
require ------ 是项目所需依赖
1.2.4 go.sum文件查看
保存着依赖包的版本和哈希值:
go.sum 里不仅会保存直接依赖包的哈希值,间接依赖包的哈希值也会被保存。
每个模块路径有如下两种哈希
相当于"双重锁"确保一致性
1.2.5 indirect 含义
此标志标明这个依赖包还未被使用,如果你在代码的某个地方 import 到的话,VSCode 的 Go 插件就会自动将这个标志去除。
1.2.6 go mod tidy 命令
此命令做整理依赖使用,执行时会把未使用的 module 移除掉
1.2.7 清空 Go Modules 缓存
go mod tidy之后本地缓存有之前go get的内容
清空本地下载的 Go Modules 缓存:
go
go clean -modcache
1.2.8 下载依赖
默认情况下,当 go run 和 go build 命令执行时(启动air
会自动执行这两步),Go 会基于 go.mod 文件自动拉取依赖。
Go Module 也提供了一个命令用以下载项目所需依赖:
go mod download
1.2.9 所有 Go Modules 命令
命令 | 功能 |
---|---|
go mod init | 生成 go.mod 文件 |
go mod download | 下载 go.mod 文件中指明的所有依赖 |
go mod tidy | 整理现有的依赖 |
go mod graph | 查看现有的依赖结构 |
go mod edit | 编辑 go.mod 文件 |
go mod vendo | 导出项目所有的依赖到 vendor 目录 |
go mod verify | 校验一个模块是否被篡改过 |
go mod why | 查看为什么需要依赖某模块 |
1.2.10 相关环境变量
-
GO111MODULE
-
GOPROXY
-
GOSUMDB
Go Checksum Database 的缩写,用于在拉取模块版本时(无论是从源站拉取还是通过 Go Module Proxy 拉取)保证拉取到的模块代码包未经过篡改,若发现不一致将会立即中止。
-
GONOPROXY/GONOSUMDB/GOPRIVATE
2 补充
2.1 git checkout .
git checkout . 命令的含义是将工作目录中所有被修改的文件恢复到最近一次提交的状态,即撤销对这些文件的修改。
2.2 遇到换行符警告
警告是由于 Git 在添加文件时检测到换行符的不一致性而引起的
git config --global core.autocrlf true