go.mod 浅谈理解

发布时间 2023-08-24 21:12:59作者: Eta7

go.mod

对于上次接触 golang 这门语言还是在上次了,最近对 zig 比较感兴趣,而突然折腾回 golang 的时候发现这玩意在1.1.1版本更新了一个叫go.mod的东西。

go.mod 是Go语言的官方包管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。Go.mod其实就是一个Modules,关于Modules的官方定义为:Modules是相关Go包的集合,其中包含了它们的依赖关系和版本信息,它们被组织在一起,并以一种允许Go语言编译器、测试工具和其他工具访问它们的方式进行管理。在Go语言中,使用Go.mod文件来定义项目的依赖关系,并且在编译项目时,Go会自动下载和安装所需要的依赖包及其版本信息。

除了go.mod之外,go命令还维护一个名为go.sum的文件,其中包含特定模块版本内容的预期加密哈希

go命令使用go.sum文件确保这些模块的未来下载检索与第一次下载相同的位,以确保项目所依赖的模块不会出现意外更改,无论是出于恶意、意外还是其他原因。 go.mod和go.sum都应检入版本控制。

go.sum 不需要手工维护,所以可以不用太关注。

go.mod的使用方法

1.创建 go.mod

# 在你的工程文件目录下
go mod init example.com/myproject

通过以上命令,我们会发现在项目的根目录下创建了一个名为go.mod的模块文件,里面默认有go的版本信息。这是一个关键文件,之后的包的管理都是通过这个文件管理。

2.go.mod的命令

  • module 指定包的名字(路径)
  • require 指定的依赖项模块
  • replace 可以替换依赖项模块
  • exclude 可以忽略依赖项模块

3.安装包

如果想要使用其他的包,我们需要先安装它们。

go get github.com/user/repo

随后在 go.mod 文件中添加依赖包的信息,该文件中,每个依赖包都由一个module path和一个以来版本号表示,例如:

module main

go 1.21.0

require (
    github.com/gorilla/mux v1.8.0
    github.com/lib/pq v1.10.0
)

其中,module path是该模块的地址,以来版本号是该模块的版本。require部分是该模块的依赖关系。

编译程序时,Go会自动下载和安装所需要的依赖包及其版本信息。

go build -mod vender

其中 -mod vendor 表示使用 go.mod 文件中指定的依赖包地址。