1、并发:多线程程序在一个核的CPU上运行 协程、通道、锁、线程同步 2、并行:多线程程序在多个核的CPU上运行 Go可以充分发挥多核优势,高效运行
1.1Goroutine 协程创建由Go语言本身形成 线程可以并发跑不同协程 栈 KB 级别协程: 用户态,轻量级线程, 线程: 内核态,线程跑多个协程,栈 MB 级别
1.2CSP 遵循先入先出 共享内存数据交换 在一定程度上会影响效果 提倡通过通信共享内存而不是通过共享内存而实现通信 1.3Channel
make(chan 元素类型,[缓冲大小]) 无缓冲通道make(chan int) 有缓冲通道make(chan int,2)
此问题有概率引起错误
1.5 WautFroup
计数器 开启协程+1; 执行结束-1; 主协程阻塞直到计数器为0 实现程度 计数器为0即完成任务
02、依赖管理 1、工程项目你不可能基于标准库0-1编码搭建 2、管理依赖库
2.1 Go依赖管理演进 1、不同环境(项目)依赖版本不同 2、控制依赖库版本
2.1.1GOPATH弊端 无法实现多版本控制
V2无法做到前后兼容 无法实现多版本控制
vendor解决多个项目需要同一个package依赖的冲突问题 (引入副本)
2.1.2Go Vendor弊端 冲突
2.2依赖管理三要素 1、配置文件,描述依赖 2、中心仓库管理依赖库 3、本地工具
测试:回归测试-集成测试-单元测试
单元测试规则: 所有测试文件以_test.go结尾 func TestXxx(*testiing.T) 初始化逻辑放到TestMain中
一般覆盖率50-60%,较高覆盖率80%+ 测试分支相互独立,全面覆盖 测试单元颗粒足够小,函数单一职责
快速Mock函数 为一个函数打桩 为一个方法打桩
基准测试 : 优化代码,需要对当前代码分析 内置的测试框架提供了基准测试的能力