SuperAPI AI 工具集

go-interface-design

设计与创作

查看项目

更新于 10-15 21:37

技能介绍

用途:这是一份 Go 接口设计指南,面向从 Java/C# 转来或希望改进 Go 抽象设计的开发者,核心观点是 Go 接口是隐式的,接口应由行为的使用方(consumer)定义,而非实现方(producer)。

主要能力与要点:

  1. 消费方定义接口:服务只声明自己需要的方法,实现类型隐式满足,避免导入循环,便于测试与接口隔离。
  2. 保持接口小:1-3 个方法为理想,更多时用组合(如 Reader、Writer 组合成 ReadWriter)。
  3. 接受接口、返回结构体:构造函数接收窄接口,返回具体类型,让调用方获得完整方法集;仅工厂模式等确实返回多种具体类型时才返回接口。
  4. 编译期合规校验:用 var _ service.UserReader = (*PostgresStore)(nil) 或 var _ http.Handler = (*LogHandler)(nil) 在类型声明后立即校验契约。
  5. 不要使用指向接口的指针:接口值内部已是类型加数据两个指针,*io.Reader 几乎总是错误。
  6. 空接口 interface{} / any 应少用,Go 1.18+ 优先用泛型。
  7. 函数式选项模式:用 type Option func(*Server) 与 WithTimeout、WithLogger 等为构造函数提供可选配置和默认值。
  8. 常见反模式:过早定义接口(只有一个实现时先用具体类型)、为“可测试性”给每个结构体套接口、用接口模拟枚举。

使用方式:资料未提供安装命令或调用方式,仅给出代码示例与决策清单(是否需要接口、定义在哪、方法数量、是否返回接口、是否已校验合规)。

适用场景:Go 项目中的包边界设计、依赖注入、可测试性改造与代码评审。

限制:资料未说明支持的 Go 版本范围(除提及 Go 1.18+ 泛型与 any)、工具集成、收费或平台信息,暂未提供。