前言
Go 支持两种并发形式,一种是我们常见的共享内存并发模型和 Go 推荐使用的 CSP (顺序进程通信) 并发模型。Go 使用了一种特殊的 MPG 线程实现模型,使得可以原生态支持并发,大大提供了程序的执行效率
依赖管理
Go的依赖管理主要分为3种:GOPATH、Go Vendor、Go Module,其中Go Module最为常用。
出现3种主要目的是围绕2个方面:不同环境(项目)依赖的版本不同、控制依赖库的版本。
module版本号规则
一个 module 的版本号规则必须遵循语义化规范:v(major).(minor).(patch)格式。
- major: 大版本,发生不可兼容的改动时增加该版本
- minor:小版本,当有新特性时增加该版本
- patch:补丁版本,当有bug修复时增加该版本
举例说明
module github.com/gin-gonic/gin
go 1.13
require (
github.com/gin-contrib/sse v0.1.0
github.com/go-playground/validator/v10 v10.9.0
github.com/goccy/go-json v0.7.8
github.com/json-iterator/go v1.1.12
github.com/mattn/go-isatty v0.0.14
github.com/stretchr/testify v1.7.0
github.com/ugorji/go/codec v1.2.6
google.golang.org/protobuf v1.27.1
gopkg.in/yaml.v2 v2.4.0
)
用法概述
- 初始化 module
- 如果一个项目想使用 Go Module,那么其本身需要先成为一个 module, 需要有一个 module 名字。
项目的module名字以及依赖关系记录在 go.mod 的文件中,该文件可以手动创建,也可以使用 go mod init 命令自动生成
go mod init xxx(module 的名称)
- 在 go.mod 文件中记录go的版本号是go 1.12 中引入的新特性,表示开发此项目的Go语言版本
- 添加依赖
可以使用go get 下载指定版本依赖包,也可以直接使用 go build 去编译文件,此时会自动分析并下载依赖包进行编译。go get 总是会下载依赖包的最新版本。
如果是第一次引用外部包,go get 还会生成一个 go.sum 文件,这个文件存储的是依赖包的哈希值信息。
go.mod文件中常见的关键字
-
module:声明 module 名称
-
require:声明依赖及版本号
-
replace:替换 require 中声明的依赖
-
exclude:禁用指定依赖
-
indirect:表示间接依赖
重点介绍indirect
indirect 总是出现在require指令中,表示这个包是被间接依赖的
require (
github.com/google/uuid v1.3.0 // indirect
)