Go 语言进阶 - 工程进阶 | 青训营笔记

68 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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并发问题