Go语言入门:工程实践
1、语言进阶
并发编程:(Go语言可充分发挥并发的优势) 并发编程指的是在编写程序时,可以同时执行多个任务或操作的能力。它允许不同的任务在同一时间段内并行执行,提高了程序的性能和响应能力。在并发编程中,程序被设计为可以同时执行多个独立的子任务,这些子任务可以是线程、进程或其他可执行单元。
并发:多线程在一个CPU核上运行(通过时间片的切换)
并行:多线程在多个CPU核上运行(可理解为 实现并发的一个手段)
线程(MB)>协程(KB):一个线程可以跑多个协程
1.1 Goroutine
开启一个协程:go + 函数(同时可以加一个sleep函数防止主函数提前结束)
1.2 协程间通信(CSP)
在协程编程中,协程间的通信是一个重要的话题。协程是一种轻量级的线程,允许程序在单个线程内执行多个任务,从而提高并发性能。
1.*通过通信共享内存(使用通道)
2.通过共享内存实现通信(使用临界区)(会影响性能)
1.3 channel
1.创建通道
make(chan 元素类型,[缓冲大小])
` make(chan int) //无缓冲通道
make(chan int,2) //有缓冲通道为2(代表缓冲通道能存放的元素) `
无缓冲通道即为同步通道(发送接收同步化)
使用带缓冲的通道作为消费者可以保证操作简单的生产者的性能不受影响
1.4 并发安全
存在多个Goroutine同时操作一块内存的情况(避免对共享内存进行非并发读写操作)
1.5 WaitGroup
计数器:主协程阻塞直到计数器为0
wait()阻塞
done()-1
add()+1
2、依赖管理
背景:工程项目不可能基于标准库0~1进行编码搭建;管理依赖库
2.1 依赖管理演进
GoPath->Go Vender->Go Module
Go语言在版本1.11之后引入了官方的依赖管理工具,名为"Go Modules"。它的目标是解决Go语言项目中依赖管理的问题,使开发者能够更方便地管理项目的依赖关系和版本控制
2.2 依赖管理三要素
1.配置文件,描述依赖 go.mod
2.中心仓库管理依赖库 Proxy
3.本地工具 go get/mod
选择最低兼容版本
go mod +init(初始化)/download(下载模块到本地缓存)/tidy(增加需要的,删除不要的)
3、测试
测试是避免事故的最后一个屏障:回归测试->集成测试->单元测试(覆盖率变大而成本在降低)
3.1 单元测试
对输出与期望值比对校验
以_test.go结尾
func Test
初始化逻辑放置TestMain中
代码覆盖率用于评估单元测试(一般覆盖率50-60%)提高覆盖率存在成本
3.2 单元测试 - 依赖
外部依赖>=稳定&幂等
4、项目实战
项目实践流程:需求设计->代码开发->测试运行