go语言和go test | 青训营笔记

60 阅读2分钟

这是我参与[第五届青训营]伴学笔记创作活动的第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 blogposts
  • cd blogposts
  • go mod init github.com/{your-name}/blogposts
  • touch 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之间可以通过通道来进行交互