这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
本堂课重点内容
01.语言进阶
02.依赖管理
03.测试
04.项目实战
详细知识点介绍
语言进阶
并发编程
协程与线程
协程可以理解为轻量级的线程,一个线程可以并发的实现多个协程,go语言一次可以调用上万个协程使用。
如何开启协程
在函数前面加上go关键字,即可为一个函数创建一个协程来运行。
通道
创建通道: make(chan 元素类型, [缓冲大小])
package concurrence
func CalSquare() {
src := make(chan int)
dest := make(chan int, 3)
go func() {
defer close(src)
for i := 0; i < 10; i++ {
src <- i
}
}()
go func() {
defer close(dest)
for i := range src {
dest <- i * i
}
}()
for i := range dest {
//复杂操作
println(i)
}
}
例:一个协程生产数字,另一个协程处理数字
通过协程可以实现数据的多并发
并发安全Lock
多个协程对同一数据区数据进行并发操作时容易引发安全问题,需要加锁来实现临界区权限的安全控制。在项目开发中,共享内存的错误难以定位,所以要尤其注意。
依赖管理
依赖管理演进
Gopath:无法实现package的多版本控制
Go Vendor:引入依赖副本解决依赖冲突问题,但是无法控制依赖的版本
Go Vendor:官方发布的比较完善的依赖管理方法
依赖配置-go.mod
依赖分发-Proxy
为解决如果作者删除或修改仓库导致无法正常拉取依赖的问题,用proxy可以保证依赖的稳定性,直接从proxy拉取依赖。
测试
go中单元测试规则
测试文件以_test.go结尾
fun TestXxx(*testing.T)
初始化逻辑放到TestMain中
项目实践
社区话题页面
设计分层结构
数据层
在存储数据的时候,用map存储,这样在做数据查询的时候更高效,时间复杂度O(1)。
逻辑层
如图所示,两个信息之间没有交互的时候,就可用到才学的go关键字做并行处理。
视图层
注意业务错误代码,添加错误处理。
总结
掌握了并发编程的相关关键字的用法。go中的依赖管理这一块不是很熟悉,需要多加练习。了解了测试的重要性,良好的测试能够大幅度降低亏损。