Go语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种高级的代码复用方案。Go语言中为我们提供了很多内置包,如 fmt、os、io 等。
模块,则是 go 包的集合。在模块的根目录,需要有一个go.mod文件来表明,这是一个模块。
包由一个或多个源文件构成。这些源文件一起声明了属于该包的常量、类型、变量和函数,并且可以在同一包的所有文件中访问。同时这些元素可以导出,并在另一个包中使用(引用)。
Go 程序,就是通过调用各个模块中的包,在一个文件中,去完成一个更复杂的产品场景或功能。
GOPATH是指工作区根目录的变量,可以通过go env进行查看,修改可以看【教程 02】,它包含以下文件夹:
src:包含按层次结构组织的 Go 源代码(需要我们自己手动创建)。pkg:存储编译后生成的包文件 (自动生成)。bin:包含已编译的二进制文件和可执行文件(自动生成)。
使用go mod init 可以命令创建一个新模块,该命令创建一个新模块并初始化go.mod描述它的文件
首先我们按照目录要求,在 src 中创建一个文件夹
shell// modA 为该模块的名称 go mod init modA

这时,会在当前目录下创建一个go.mod 文件,表示该目录是一个模块

在 go.mod 中,可以对模块做个基本配置
go// 模块名
module modA
// go 语言版本
go 1.19
// 依赖的其他模块
require (
...
)
安装、编写一定要写在 GOPATH 下
我们可以使用 go install 添加一个依赖
go install 的编译过程有如下规律:
shell// 安装一个 github 上存储的包 go install github.com/rs/zerolog
相关信息
go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下

这时会自动添加至 go.mod 的 requeire 中

同时生成一个 go.sum 的文件。此文件包含新模块内容的预期哈希值。

我们可以使用 go list列出当前模块所有依赖项
shellgo list -m all

我们可以使用go mod tidy命令简单地删除,模块中没有使用的包。同时整理直接引用和间接引用的包。
go// 模块根目录下创建 main.go
package main
import "github.com/rs/zerolog/log"
func main() {
log.Info().Msg("Hello")
}
shell// 该命令会删除所有依赖,相应修改 go.mod 和 go.sum 文件内容 go mod tidy


go 中可以使用go mod vender,将第三方包的文件复制到模块目录中,可以视为虚拟环境
venvgo mod vender

本文作者:Silon汐冷
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!