这是我参与「第五届青训营」伴学笔记创作活动的第2天
一、本堂课重点内容
- 并发编程:协程、通道、锁、同步
- 依赖管理:Gopath、Go Vendor、Go Moudle
- 单元测试:mock测试、基准测试
二、详细知识点介绍
1 并发编程
- 并发与并行
- 并发:在一个单体cpu上同时运行多个程序,cpu在每个程序上轮流切换
- 并行:在多个cpu上运行多个程序,可以在同一时刻有多个程序运行
- 进程、线程、协程
- 进程:是资源的分配单位
- 线程:是处理器调度的执行单位
- 协程:是轻量级的线程,一个线程可以跑多个协程
- go中使用go关键字+函数,开启协程
- channel用于通信,分为无缓冲通道和有缓冲通道
- lock用于保证读写数据的一致性
- waitgroup可以监控管理多个协程
2 依赖管理
- 演化过程GOPATH --> Go Vendor --> Go Module(主流)
- go mod
- init 初始化,创建go.mod文件
- download 下载模块到本地缓存
- tidy 增加需要的依赖,删除不需要的依赖
3 单元测试
- 规则
- 所有测试文件以_test.go结尾
- 在要测试的函数名前+Test
- 测试的代码覆盖率一般为50~60%
三、实践案例
- 做一个简单的web服务端,根据查询的id返回json字符串
- 数据层:对数据进行增删改查
- 逻辑层:对数据层进一步封装,处理核心业务
- 视图层:接收请求,返回数据
四、课后个人总结
- 关于并发编程,go采用了比线程更为轻量级的协程,极大的降低系统开销,在用户态使用自己的调度机制。协程之间的通信使用channel,很方便。
- go的依赖管理是一个不断演化的过程,当前的gomod与java的maven非常类似,如果之前学过maven,可以快速理解gomod。
- 测试非常重要,go test可以方便的查看测试的代码覆盖率,这点很不错。
- 项目案例部分是一个简单的单体web服务,这里面的代码格式和分层结构很值得参考。
五、引用参考
- www.topgoer.com/
- www.w3cschool.cn/go/
- golang.google.cn/