这是我参与[第五届青训营]伴学笔记创作活动的第1天
go mod使用方法
go module介绍
- go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用
- go module可以将某个项目(文件夹)下的所有依赖整理成一个 go.mod 文件,里面写入了依赖的版本等 使用go module之后我们可不用将代码放置在src下
- 使用 go module 管理依赖后会在项目根目录下生成两个文件 go.mod(会记录当前项目的所依赖)和go.sum(记录每个依赖库的版本和哈希值)
GO111MODULE
GO111MODULE是 go modules 功能的开关
- GO111MODULE=off,无模块支持,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
- GO111MODULE=on,模块支持,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
- GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形: (1)当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。 (2)当前文件在包含go.mod文件的目录下面。
//初始化模块:
go mod init <项目模块名称>
//依赖关系处理,根据go.mod文件
go mod tidy
//将依赖包复制到项目的vendor目录
go mod vendor
//显示依赖关系
go list -m all
//显示详细依赖关系
go list -m -json all
//下载依赖
go mod download [path@version]
go test
mkdir blogpostscd blogpostsgo mod init github.com/{your-name}/blogpoststouch blogposts_test.go
package blogposts_test
func main() {
return
}
运行go test并测试
go test -v
并发与分布式
- go语言在语言级别支持协程,叫goroutine。go语言标准库提供的所有系统调用(syscall)操作,也包括所有的同步IO操作,都会出让CPU给其他goroutine
执行体间的通信
- 执行体之间的互斥与同步
- 执行体之间的消息传递
并发编程模型
- 共享内存模型
- 消息传递模型
-
- 轻量级的进程
-
- 消息乃进程间通信的唯一方式
-
- 当执行体之间需要相互传递消息时,通常需要基于一个消息队列(message queue)或者进程邮箱(process mail box)这样的设施进行通信
go语言推荐采用"Erlang风格的并发模型"的编程范式
- 尽管传统的"共享内存模型"仍然被保留,允许适度地使用。在Go语言中内置了消息队列的支持,只不过它叫通道(channel)。两个goroutine之间可以通过通道来进行交互