这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
Channel
无缓冲通道-->同步通道
消费者消费慢,则使用带缓冲 channel
为了解决生产者、消费者速度不均衡带来的效率问题
例子中为什么 ABM 协程按顺序执行?
用 channel 实现(通信方式模拟共享内存)并发更容易,并且不容易出现安全问题。 用共享内存(共享内存方式模拟通信)需要 lock, 容易出并发安全问题。
WaitGroup 实现并发同步
可以用来等待所有任务执行完
项目依赖
寻找依赖优先级 vendor > GOPATH vendor 目录保存项目依赖副本,解决多项目同一个 pkg 的冲突
推荐 go module 管理依赖
构建依赖三要素
go. mod 配置文件,描述依赖 proxy 中心仓库 go get/mod 本地工具
选择最低兼容版本(major 主版本号一致的,minor 号的最大号码)
proxy 依赖分发
去哪下载依赖
可以多层 proxy GOPROXY 环境变量
测试
幂等:
Mock
打桩(替换),测试函数不依赖与本地文件
fastrand 牺牲了随机序列一致性,但并发快。原始 rand 并发低
项目(回帖)
单例
sync. Once
课后问题: Append 文件,更新索引,注意 Map 并发安全问题
内建的 map 不是线程 (goroutine) 安全的 需要自定义 struct 加锁等方式实现并发安全 Golang:一文解决Map并发问题