Go 语言相比于其他语言来说,一个比较鲜明的特点就是自带了包管理工具。随着 Go 1.11 的发布,官方的包管理工具 Go Modules
变得流行起来。在 Go 1.12 版本中,增强了对 Go Modules
的支持。
Go Modules 进行包管理
使用 Go Modules 进行包管理的第一步是在项目根目录下执行 go mod init <module-name>
命令,初始化 go.mod
文件。
执行完这个命令之后,将在项目的根目录中创建一个新的 go.mod 文件,其中包含以下文件:
module myproject
go 1.19
其中,module
指令指定了项目的模块路径,go 指令指定了使用的 Go 版本。这两个指令是必须的,其他指令可以根据需要添加。
添加、更新和删除依赖库
添加依赖使用 go get
命令。
go get <package-name>(@version)
添加依赖后,Go Modules 会自动更新 go.mod
文件并下载依赖包。这些依赖包可能还有其他依赖,Go Modules 也会自动下载这些依赖以满足所有依赖关系。
查看所有依赖项:
go list -m all
更新依赖项使用 go get -u
命令:
go get -u github.com/gin-gonic/gin(@version)
使用私有仓库或镜像来管理依赖库
在使用 Go Modules 进行包管理时,可以使用私有仓库或镜像来管理依赖库。具体步骤如下:
- 配置 GOPROXY 环境变量。可以通过
export GOPROXY=https://myproxy.com
或go env -w GOPROXY=https://myproxy.com
命令设置 GOPROXY 环境变量。其中,myproxy.com
是私有仓库或镜像的地址。 - 配置 GOSUMDB 环境变量(可选)。如果使用的是私有仓库,建议同时设置 GOSUMDB 环境变量。可以通过
export GOSUMDB=off
或go env -w GOSUMDB=off
命令关闭 GOSUMDB 验证,或通过export GOSUMDB=gosum.io+<myproxy.com>
或go env -w GOSUMDB=gosum.io+<myproxy.com>
命令指定私有仓库的 GOSUMDB 验证地址。 - 使用 go get 命令获取依赖库。如果 GOPROXY 环境变量已配置正确,则会从私有仓库或镜像中获取依赖库。
go.mod 和 go.sum 文件
在 Go 语言中,go.mod 和 go.sum 是用于模块管理的两个重要文件。
go.mod
- 作用:go.mod 文件是 Go 模块的描述文件,用于定义模块的基本信息、依赖关系和版本信息。
- 内容:包括模块的路径、版本、依赖项等信息。例如:
module example.com/myproject
go 1.16
require (
github.com/some/module v1.2.3
another/module v0.4.1
)
- 区别:
go.mod
是主要的模块文件,描述了项目的基本结构和依赖关系。
go.sum
- 作用:
go.sum
文件是用于确保模块的版本在构建时的安全性和一致性。它记录了项目所使用的每个模块及其依赖项的确切版本和哈希值。 - 内容:包含了每个模块的路径、版本和哈希值。这有助于确保在构建时使用的确切模块版本与开发时使用的版本一致,从而避免潜在的安全和一致性问题。
- 区别:
go.sum
是一个包含了模块版本和哈希信息的元数据文件,用于确保模块版本的一致性。
总体来说,go.mod
是主要的模块描述文件,而 go.sum
是一个用于确保模块版本一致性的元数据文件。这两个文件在 Go 的模块管理中起着关键的作用,确保项目的依赖关系是明确定义的、一致的,并提供了一定程度的安全性。
go.mod 和 go.sum 的更新
通常情况下,修改了 go.mod
文件后,go.sum
文件会在执行 go get
、go build
或其他涉及到模块下载和构建的操作时自动更新。go.sum
文件中包含了依赖模块的哈希值,用于确保项目在构建时使用的是预期的模块版本。
如果手动修改了 go.mod
文件,建议在修改之后执行相关操作(例如运行 go build
或 go get
或 go mod tidy
)以触发 go.sum
文件的更新。这样可以确保 go.sum
文件中记录的哈希值是与 go.mod
文件中指定的模块版本相匹配的。
Go 模块管理工具会自动维护 go.sum 文件,但在手动编辑 go.mod 文件后,最好手动触发一些操作以更新 go.sum
文件,以确保依赖关系的一致性。
修改 Go 语言环境变量
在 Go 语言中,修改环境变量有多种方式。
① 使用 export
命令(Linux/Unix 系统):
export GOPATH=/path/to/your/go/workspace
② 使用 set
命令(Windows 系统):
set GOPATH=C:\path\to\your\go\workspace
③ 直接修改配置文件:可以直接编辑配置文件,例如 .bashrc
、.bash_profile
(Linux/Unix)或者 Environment Variables
(Windows),在文件中添加或修改环境变量。修改后需要重新启动终端或者应用程序,以使更改生效。
④ 使用 go.env 命令:使用 go env
命令可以查看和设置 Go 语言相关的环境变量。
go env -w GOPATH=/path/to/your/go/workspace
⑤ 在代码中使用 os 包:在 Go 代码中,可以使用 os 包来设置环境变量。
package main
import (
"os"
)
func main() {
os.Setenv("GOPATH", "/path/to/your/go/workspace")
}
这种方法只会在程序运行时设置,对于终端窗口之外的其他环境可能不会影响。
Reference
- Go Modules 包管理机制:https://juejin.cn/post/7208488647534854201
- Go 的包管理工具:https://juejin.cn/post/7208488647534854201