SuperAPI AI 工具集

writing-go

编程与开发

查看项目

更新于 10-15 23:43

技能介绍

用途:在编写 Go 代码、设计 API、讨论 Go 模式或审查 Go 实现时提供惯用写法指导,面向 Go 1.25+。

核心原则:优先使用标准库,仅在合理时引入外部依赖;使用具体类型,接口定义在消费方,函数返回结构体;始终用组合而非继承;快速失败,错误带清晰上下文;保持简单,显而易见的方案通常正确。

常见模式:错误处理用 fmt.Errorf("do thing: %w", err) 包装;结构体配合 Option 函数式选项设置默认值;表驱动测试配合 testify 的 require/assert。

Go 1.25 特性:testing/synctest 提供带模拟时钟的确定性并发测试;encoding/json/v2 为实验性,需 GOEXPERIMENT=jsonv2,据称快 3-10 倍;runtime/trace.FlightRecorder 支持按需捕获生产环境 trace;容器感知的 GOMAXPROCS 自动检测 cgroup 限制;GreenTea GC 为实验性,需 GOEXPERIMENT=greenteagc,延迟更低。

工具命令:go build ./...、go test -race ./...、golangci-lint run、mockery --all。

注意事项:向 nil channel 发送或接收会永久阻塞,已关闭 channel 接收立即返回零值,select 中 nil channel 分支会被禁用;defer 在调用处捕获参数而非执行时;Go 1.22 之前循环变量在所有迭代中共享同一变量,易产生 goroutine 循环 bug,1.22 已改语义;errors.Is 会遍历 Unwrap() 链,但若被包装错误自身实现 Is(target error) bool,则自定义 Is 优先;sync.Pool 中的对象可能在 Get 与下次 Put 之间被 GC,不可依赖其保留状态。

参考文档包括 PATTERNS.md、TESTING.md、CLI.md。