编辑
2022-09-26
Golang
00
请注意,本文编写于 845 天前,最后修改于 817 天前,其中某些信息可能已经过时。

目录

模块
GOPATH
创建模块
配置模块
依赖管理
添加依赖
查看所有依赖
删除依赖项
将依赖文件复制至项目内部

模块

Go语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种高级的代码复用方案。Go语言中为我们提供了很多内置包,如 fmt、os、io 等。

模块,则是 go 包的集合。在模块的根目录,需要有一个go.mod文件来表明,这是一个模块。

由一个或多个源文件构成。这些源文件一起声明了属于该包的常量、类型、变量和函数,并且可以在同一包的所有文件中访问。同时这些元素可以导出,并在另一个包中使用(引用)。

Go 程序,就是通过调用各个模块中的包,在一个文件中,去完成一个更复杂的产品场景或功能。

GOPATH

GOPATH是指工作区根目录的变量,可以通过go env进行查看,修改可以看【教程 02】,它包含以下文件夹:

  • src:包含按层次结构组织的 Go 源代码(需要我们自己手动创建)。
  • pkg:存储编译后生成的包文件 (自动生成)。
  • bin:包含已编译的二进制文件和可执行文件(自动生成)。

image.png

创建模块

使用go mod init 可以命令创建一个新模块,该命令创建一个新模块并初始化go.mod描述它的文件

首先我们按照目录要求,在 src 中创建一个文件夹

shell
// modA 为该模块的名称 go mod init modA

image.png

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

image.png

配置模块

在 go.mod 中,可以对模块做个基本配置

go
// 模块名 module modA // go 语言版本 go 1.19 // 依赖的其他模块 require ( ... )

依赖管理

添加依赖

安装、编写一定要写在 GOPATH 下

我们可以使用 go install 添加一个依赖

go install 的编译过程有如下规律:

  • go install 是建立在 GOPATH 上的,无法在独立的目录里使用 go install。
  • GOPATH 下的 bin 目录放置的是使用 go install 生成的可执行文件,可执行文件的名称来自于编译时的包名。
  • go install 输出目录始终为 GOPATH 下的 bin 目录,无法使用-o附加参数进行自定义。
  • GOPATH 下的 pkg 目录放置的是编译期间的中间文件。
shell
// 安装一个 github 上存储的包 go install github.com/rs/zerolog

相关信息

go install 只是将编译的中间文件放在 GOPATH 的 pkg 目录下,以及固定地将编译结果放在 GOPATH 的 bin 目录下

image.png

这时会自动添加至 go.modrequeire

image.png

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

image.png

查看所有依赖

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

shell
go list -m all

image.png

删除依赖项

我们可以使用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

image.png

image.png

将依赖文件复制至项目内部

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

venv
go mod vender

image.png

本文作者:Silon汐冷

本文链接:

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