这是我参与「第五届青训营 」伴学笔记创作活动的第2天
一、重点内容:
- 本次主要学习了go语言高性能的协程、通道和锁等知识,了解了go的依赖是如何管理的,也学习了单元测试的方法,并通过一个项目实践进行运用。
二、详细知识点介绍:
- 协程(Goroutine)
- 协程是go语言特有的高性能编程的基础知识。
- 协程处于内核态,一个线程中可以运行多个协程,栈仅是KB级别,开销比线程还小得多。
- 协程提倡通过通信共享内存而不是通过共享内存而实现通信。
- 可以简单地采用WaitGroup实现协程间地同步阻塞。
- 通道和锁
- 通道分为带缓存的和不带缓存的,会影响传输效率。
- 锁是用来实现并发安全的,用法和其他类型地语言类似。
- 依赖管理
- 工程项目不可能仅基于标准库从头搭建,需要站在巨人地肩膀上,快速地实现项目开发。
- 依赖管理主要通过:
- 1、配置go.mod文件描述依赖
- 2、通过Proxy管理依赖库
- 3、通过本地工具go get/mod管理依赖
- 通过代理地方式可以实现稳定可靠地依赖管理,如图所示:
graph TD
Github --> Proxy
SVN --> Proxy
... --> Proxy
Proxy --> Developer
- 单元测试
- 所有测试文件以_test.go结尾,函数名称加上Test,初始化逻辑放到TestMain中。
- 灵活运用第三方库,如assert包等。
- 通过Mock去除测试时的依赖,为函数或者方法打桩,从而不依赖本地或托管文件。
三、实践练习例子:
- 主要是实现一个展示社区话题页面的项目,包含展示话题、回帖列表等功能。
- 注意分层结构包含数据层、逻辑层和视图层,确定各个接口的设计和访问逻辑。
四、课后个人总结:
- 该课程相比上一次的课程提升了不少,需要把相关知识尽快巩固,以达到可以完成项目的水平。
- 实际编程的时候不会像课程中这么顺畅,需要自己做好完备的单元测试,从而快速定位和解决问题。
- go语言的包功能很强,需要自己在实践中熟悉和掌握。用好了包能起到事半功倍的效果。