Go 语言进阶 - 工程进阶 | 青训营笔记

65 阅读2分钟

Go 语言进阶 - 工程进阶 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天,本节课主要讲了关于并发、依赖管理以及单元测试、mock测试、基准测试的关系,并进行了项目实战的讲解。

1.语言进阶

知识补充:并发与并行的区别

并发:多线程程序在一个核上运行(分时间片以及一些调度算法)

并行:多线程程序在多个核上运行

1.1 Goroutine

线程:处于内核态 ,其创建、切换、停止等操作消耗较大。

协程:轻量级线程,处于用户态。故可同时运行成千上万的并发任务。协程的切换由协程调度器完成,不需要陷入内核,代价更小。

在Go语言中,只需要用"go"加函数名称即可让此函数变为并发函数。

1.2 CSP

Go提倡通过通信共享内存而不是通过共享内存而实现通信。

1.3 channel

通道可分为有缓冲通道与无缓冲通道。 创建:make(chan 元素类型,[缓冲大小]) 可以使用有缓冲通道解决生产者与消费者速度不匹配的问题。

1.4 并发安全 Lock

通过对临界区的控制(如增加互斥信号量)

1.5 WaitGroup

WaitGroup包括Add(delta int)、Done()、Wait()三种语句实现协程同步

2.依赖管理

2.1 Go依赖管理演进

GOPATH无法实现package的多版本控制。

Go Vendor通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题,但无法控制依赖的版本,更新项目又可能出现依赖冲突。

Go Module定义版本规则和管理项目依赖关系。

2.2依赖管理三要素

1.配置文件,描述依赖 go.mod

2.中心仓库管理依赖库 Proxy

3.本地工具 go get/mod

3.测试

测试可分为回归测试、集成测试与单元测试。

4.总结

本次实战项目对最后大项目的实现有些启发,课后再花时间梳理。