用途:提供一套“无聊、显式、并发安全”的 Go 惯用写法,用于编写或评审 Go 代码、设计接口与包结构。
主要能力: 错误处理:在包边界用 %w 包装错误以保留错误链,如 fmt.Errorf("fetching user %s: %w", userID, err);用 errors.Is 检查包装错误,用 errors.As 提取具体错误类型。避免用 %v(丢失类型)、从导出函数返回裸错误、使用泛化上下文。 接口设计:接口定义在使用方包而非提供方包;接口保持小(1-3 个方法),可由小接口组合成大接口(如 Reader、Writer 组合为 ReadWriter);用 var _ EmailSender = (*Client)(nil) 做编译期校验。 并发:始终传递 context,用 select 监听 ctx.Done();用带缓冲 channel 作信号量实现有界并发;始终运行 go test -race ./... 保证竞态安全。 包设计:按领域划分包(如 internal/user、internal/order、internal/app 做依赖装配,cmd/api 作入口);单一职责、避免 utils/helpers/common 等泛化命名、禁止循环依赖、只导出必要内容。 依赖注入:构造函数接收接口;在 app 包中完成装配。当构造函数参数达 5 个以上时使用 deps 结构体,对必需依赖为 nil 时 panic,以便在构造期而非运行期暴露错误;改造旧构造函数时需更新所有调用点为结构体字面量,并检查依赖旧 nil 容忍行为的测试。 测试清理:用 t.Cleanup() 做清理并处理错误,而非用 defer 加错误抑制(如 defer func() { _ = os.Chdir(orig) }() 会触发 SA4017 警告)。
反模式:无取消路径的 goroutine(泄漏)、10 个以上方法的巨型接口、类继承式框架模式、可用显式类型时的反射、依赖的全局单例、滥用泛型、无理由的 interface{}/any、测试中 defer 抑制错误。
适用场景:Go 代码编写与评审、接口与包结构设计、并发与依赖注入实现、测试清理规范。
限制:资料未提供安装命令、版本要求、平台支持、收费方式及具体使用步骤,暂未提供。