用途:这是一份地道 Go(Idiomatic Go)编程技能,用于编写新 Go 代码、审查或审计现有代码、重构(尤其是把 Java/Spring Boot 风格改写成 Go 风格)、设计包与模块/API、在标准库与第三方库之间做选择,以及回答项目结构、错误处理、并发和测试相关问题。
主要能力与原则:强调清晰优于聪明、零值可用、尽早返回保持主路径靠左。包组织默认扁平,反对默认使用深层目录和 Clean Architecture 分层;internal/ 仅用于库中需共享导出类型但禁止外部依赖的复杂子系统;服务应用可按领域建顶层包(如 auth、billing、jobs),包之间不横向互相导入,由 main 负责装配,不建 utils/helpers/common。接口在使用方定义,先写具体类型,接受接口、返回结构体。库 API 以领域对象为入口,避免全局状态。并发上主张通过通信共享内存,用 errgroup 的 SetLimit 做有界并发,Go 1.22 起循环变量按迭代独立,Go 1.25 可用 sync.WaitGroup.Go,且每个 goroutine 都要有明确退出条件。错误是值,用 fmt.Errorf 加 %w 包装上下文。测试推荐表驱动、t.Helper()、手写 fake、testdata 与 golden 文件、afero 文件系统抽象、go-cmp,以及 Go 1.24+ 的 t.Context()、b.Loop()、t.Chdir 和 Go 1.25 的 testing/synctest。泛型仅用于消除重复算法,不用于继承式多态。标准库优先使用 slices、maps 等新包。
使用方式与限制:资料未提供具体安装命令或调用步骤,仅给出技能页面 URL。内容面向 Go 语言,涉及版本特性(如 Go 1.18、1.21、1.22、1.24、1.25),实际可用性取决于所用 Go 版本;资料未说明收费、平台或效果信息。