SuperAPI AI 工具集

go-dev

编程与开发

查看项目

更新于 10-30 16:18

技能介绍

用途

go-dev 是一套 Go 开发最佳实践、编码模式与代码规范,面向生产级 Go 应用。它适用于编写新的 Go 代码、审查 Go 代码等场景,帮助在项目中保持一致的实现风格与质量标准。

主要能力

该技能将深入主题拆分为多个聚焦的参考文件,包括:

  • Interfaces:内联接口定义、小而专注的接口、函数式选项。
  • Error Handling:黄金规则、错误包装、哨兵错误、多错误处理。
  • Concurrency:errgroup、工作池、channel 模式。
  • Generics:类型参数、约束、数据结构、决策框架。
  • Testing:表驱动测试、mock、基准测试、模糊测试。
  • Performance & Footguns:预分配、同步原语、常见陷阱。

同时提供快速参考表,以“✅ Do This / ❌ Never This”的形式对比推荐与禁止做法。

错误处理

  • 使用 errors.Is(err, ErrX),不要用 err == ErrX。
  • 使用 errors.As(err, &target),不要用 err.(*Type)。
  • 使用 fmt.Errorf("...: %w", err),不要用 fmt.Errorf("...: %v", err)。
  • 使用 errors.Join(errs...),不要手动收集错误。

并发

  • 使用 errgroup.WithContext(ctx),不要用裸 sync.WaitGroup。
  • 使用 g.SetLimit(n),不要产生无界 goroutine。
  • 注意循环变量捕获,不要在 goroutine 中使用 range 变量。
  • 使用 context 进行取消,不要用全局 done channel。

测试

并发代码必须进行竞态检测;覆盖率与基准测试沿用任何 Go 项目相同的 go test 标志。

使用方式

该技能以参考文件与快速对照表的形式组织内容,在编写或审查 Go 代码时按主题查阅对应参考文件即可。相关技能包括 go-setup(项目初始化与库选择)与 go-fluent-testing(单元/集成/E2E 测试,fluent Given/When/Then 风格)。

具体规则

Go 嵌入(embedding)

嵌入会把被嵌入结构体的成员提升到外层类型上。绝不要在方法内部重新绑定宿主(p := c.parts 永远是错的):应直接在接收者上调用被提升的成员(c.require、c.parsedFile、c.aClient())。只有当需要把宿主作为值传递时,跳转才是合理的。绝不要构建双向循环(基础结构嵌入子结构,同时子结构又嵌入基础结构)——提升关系应保持单向。完整规则见 references/performance.md §Go embedding。

不要写 var _ = []any{ Type{} } 这类编译断言块(或 var _ 未使用导入消音器)——这是死噪音;删除它们,让未使用的名称真正成为死符号。完整规则见 references/performance.md §No lint-appeasement constructs。

设计验收是一道门禁

门禁(build/vet/lint/tests/parity)验证的是代码正确性:它们都不验证用户是否接受该设计。结构性/拓扑性变更(文件布局、结构体形态、DSL 模式)需要先在一个探针文件上获得用户签字确认,再大规模应用:未经确认的模式一波波交付,会把每次评审都变成重写。每条存储的设计规则都带有 as-of 日期;当用户表示形态不对时,应从头重新阅读该规则,而不是重新套用已存储的规则。

流式链式结构形态(Go DSL 结构体)

流式构建器链只有在每个构建器返回相同具体类型时,才能在提升后继续存活。优先使用一个持有全部状态的结构体,方法定义在 *parts 风格的接收者上并返回该指针:这样混合领域链和 .and() 链接都能工作,且调用点零改动。在添加包装结构体、泛型自类型或按领域返回类型之前,先在一个临时模块中(go mod init + 一个测试)原型化最糟糕的链,并检查跨领域链接能否编译:自类型泛型(parts[S])在调用另一个领域的方法时就会破坏链,而 *parts 接收者无法健全地返回领域类型 S(零值 = nil)。Go 1.27 的泛型方法无法解决这个问题。包装标记结构体(无状态的 type X struct { base })只会增加构造函数仪式而没有行为;如果状态已经是扁平的,它们会在下一次简化时被删除。

适用场景

适用于编写新的 Go 代码、审查 Go 代码,以及需要统一生产级 Go 应用编码规范与模式的开发流程。

限制

资料未提供该技能的安装命令、收费方式、价格、平台支持范围或具体效果数据,这些信息暂未提供。