Go: 标准库
定义足够稳定的基础接口,让生态可以围绕其组合。
小而稳的标准库 + Go 项目维护的扩展库(golang.org/x/...)
普通库 vs. 标准库
普通库可以:发新版;改 API;废弃旧方案;被更好的库替代。 标准库一旦发布,通常会被大量代码依赖。Go 1 兼容性承诺要求它不能轻易破坏兼容性。于是标准库会变成一种“历史冻结层”。
标准库判断标准
- 是否足够基础?
- 是否跨领域通用?
- API 是否已经稳定?
- 是否需要作为生态统一协议?
- 一旦放进去,长期维护成本是否可接受?
这也是我们学习标准库的核心所在:核心抽象、基础协议、底层能力、跨库协作接口
- Go: 标准库 io 提供读写的核心抽象和基础协议;
- Go: 标准库 io/fs 提供文件系统的核心抽象和基础协议;
- Go: 标准库 context 提供跨 API 边界传播取消、截止时间和请求作用域值的能力;
- Go: 标准库 errors 提供错误包装、匹配和类型断言的基础协议。
Go 标准库常见的设计方式:基础接口尽量小(最低承诺)、额外能力用额外接口表达(可选增强)、调用方按需做类型断言(是否有额外增强能力)
评论