【go语言进阶笔记|青训营】

107 阅读2分钟

前言

Go 支持两种并发形式,一种是我们常见的共享内存并发模型和 Go 推荐使用的 CSP (顺序进程通信) 并发模型。Go 使用了一种特殊的 MPG 线程实现模型,使得可以原生态支持并发,大大提供了程序的执行效率

依赖管理

Go的依赖管理主要分为3种:GOPATHGo VendorGo 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
)