| name | go-utility-libraries |
| description | 在新增项目通用工具函数前,从 github.com/samber/lo 和 github.com/duke-git/lancet/v2 中查找并选择可复用的 Go 工具函数。实现或审查跨模块工具、集合映射字符串时间文件处理、指针默认值转换、重试或并发辅助逻辑时使用,尤其适用于在 utils/ 下新增代码之前。 |
Go 通用工具库
新增项目级辅助函数前使用本技能。标准库能够清晰表达意图时优先使用标准库;否则在 lo 或 Lancet 中选择现成实现,再考虑在 utils/ 下新增代码。
仓库基线
github.com/samber/lo v1.53.0 是直接依赖。
github.com/duke-git/lancet/v2 v2.3.9 已作为间接依赖存在。
- 导入 Lancet 时使用 v2 模块路径,例如
github.com/duke-git/lancet/v2/strutil。
选择函数时读取函数索引。该索引用于按类别定位候选函数,不能替代锁定版本中对精确签名与行为的说明。
选择流程
-
明确输入、输出、错误行为、是否修改输入,以及是否需要取消能力。
-
先检查标准库:slices、maps、cmp、strings、strconv、time、net/url、os 和 path/filepath 适合小而惯用的操作。
-
对泛型切片或映射转换、指针或默认值、分组、筛选、集合运算及小型控制流辅助,检查 lo。
-
对字符串、日期时间、文件、网络、类型转换、校验、重试或数据结构等广义工具,检查对应 Lancet 子包。
-
编码前按锁定版本核对精确 API:
go doc github.com/samber/lo
go doc github.com/duke-git/lancet/v2/<subpackage>
-
引入库并直接调用,前提是它能让调用点更清晰。不要仅为转调现有函数而在 utils/ 中增加包装层。
-
仅当标准库和这两个库都不能满足项目要求时,才在 utils/<purpose>.go 中增加聚焦的辅助函数,并编写同包测试。
库选择
| 需求 | 优先选择 | 原因 |
|---|
| 切片或映射的筛选、映射、分组、归约、指针处理 | lo | 单包内提供简洁的泛型 API。 |
| 字符串、日期时间、文件、网络、校验、加密、系统工具 | Lancet 子包 | 提供更广泛的领域型 API。 |
| 简单的标准操作 | 标准库 | 依赖更少,行为更熟悉。 |
| 领域策略或项目集成 | utils/ | 仅保留不能安全复用的代码。 |
安全规则
- 保留
context.Context;不要使用会丢失取消信号或引入无界后台工作的辅助函数。
- 处理所有返回错误。在请求或服务路径中不要使用
lo.Must 等会 panic 的辅助函数。
- 使用加密便捷函数前,确认所需模式、nonce/IV 处理、认证方式与密钥生命周期。
- 在业务逻辑中使用前,确认函数是否修改输入、返回别名,以及是否保证顺序。
- 不要仅为了查看文档而新增依赖版本;使用
go doc、模块缓存或锁定版本的包文档。
输出要求
选择辅助函数时,说明所选包和函数、它比新增 utils 辅助函数更合适的原因,以及调用方必须了解的行为。若没有可复用实现,新增项目工具前说明已检查的候选项。