Day 2
1 并发 VS 并行
1.1 协程
协程:用户,轻量级线程,栈MB级别
线程:内核态,线程跑多个协程,栈KB级别
1.2 CSP(communicating Sequential Processes)
提倡通过通信共享内存而不是通过共享内存而实现通信。
1.3 Channel
make(chan 元素类型,[缓冲大小])
-
无缓冲通道 make(chan int)
-
有缓冲通道 make(chan int,2)
2 依赖管理
关注业务逻辑
环境变量 $GOPATH
2.1 Go Moudule
会选择最低的兼容版本
通过 go.mod 文件管理依赖包版本
通过 go get / go mod 指令工具管理依赖包
- 配置文件 描述依赖 go.mod
2.中心仓库管理依赖库 Proxy
3.本地工具 go get/mod
依赖管理基本单元
原生库
单元依赖
2.2 依赖分发 Proxy
环境变量 $GOPROXY
导入第三方网站的包 例如:github
2.3 工具 go get
2.4 工具 go mod
go mod init 初始化
go mod download 下载模块到本地缓存
go mod tidy 增加需要的依赖 删除不需要的依赖
3 测试
3.1 单元测试
测试单元与期望值的比较
-
所有测试文件以_test.go 结尾
-
func TestXxx(*testing.T)
-
初始化逻辑放到TestMain中
3.2 代码覆盖率
3.3 依赖
外部依赖=》 稳定&幂等
3.3 文件处理
3.4 Mock 函数
3.5 基准测试
3.6 优化
4 小项目
4.1 ER 图
话题 帖子
4.2 分层结构
- 数据层 :数据model 外部数据的增删改查
- 逻辑层: 业务Entity 处理核心业务逻辑输出
- 视图层: 视图View 处理和外部的逻辑交互