GO 语言上手 | 青训营笔记

115 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

语言进阶

并发编程基础

1. goruntine

协程(轻量级线程)通过 go 关键词使用,如下

go func()

2. CSP(Communicating Sequential Processes)

Do not communicate by sharing memory; instead, share memory by communicating.

不要通过共享内存来通信,而要通过通信来实现内存共享。

这就是 Go 的并发哲学,它依赖 CSP 模型,基于 channel 实现。

3. channel

Go 语言的特色之处,分为无缓冲和有缓存通道两种

make(chan, int)
make(chan, int, 2)

应用:

  • 停止信号

  • 定时任务

  • 解耦生产者和消费者

  • 控制并发数

4. 并发安全

Lock

WaitGroup()

依赖管理

1. 配置文件

go.mod go mod init

2. 中心仓库管理依赖库

GOPROXY=goproxy.cn,direct

3. 本地工具

go get/mod

测试

1. 单元测试

规范

  • 文件规范 所有的测试文件以 _test.go 结尾

  • 函数名规范

func Test***(***testing.T)

  • 初始化逻辑放入 TestMain 中
func TestMain(m *testing.M) {
//测试前:数据装载,配置初始化等前置工作
code := m.Run()
//测试后:释放资源等收尾工作
os.Exit(code)
}

覆盖率 Tips:

  • 一般覆盖率: 50% - 60%, 较高覆盖率 80%。
  • 测试分支相互独立、全面覆盖 +测试单元粒度足够小,函数单一职责

依赖

稳定,幂等

2. Mock

打桩

不依赖数据库、本地文件等等,

防止由于非函数或者代码问题出现的非幂等现象

3.基准测试

ps:fastrand 和 rand 函数, rand 在高并发场景下由于加锁问题导致性能表现问题

项目实战

1. 需求设计

2. 代码开发

3. 测试运行