用途:本技能面向 Go 语言中接口与组合的设计与实现,适用于定义或实现接口、设计抽象、为测试创建可 mock 的边界,以及通过嵌入组合类型。
主要能力与建议:接口应定义在使用方(消费方)包,而非实现方包;构造函数返回具体(通常为指针或结构体)类型,便于新增方法而不重构。不要在接口被使用前预先定义。若类型仅用于实现某接口且无其他导出方法,可从构造函数返回接口以隐藏实现。
必要用法:类型断言使用逗号-ok 惯用法避免 panic,例如 str, ok := value.(string);检查是否实现接口用 if _, ok := val.(json.Marshaler); ok。类型 switch 中可复用变量名 t := t.(type)。嵌入方面,避免在公开结构体中嵌入类型,因其方法集会进入公开 API,应改用非导出字段。接口满足性检查用编译期断言 var _ json.Marshaler = (*RawMessage)(nil)。接收者若有疑问用指针接收者,同一类型不要混用接收者;值接收者仅用于小而不可变的类型。
验证:定义接口或实现后,运行 bash scripts/check-interface-compliance.sh 检查具体类型是否都有编译期 var _ I = (*T)(nil) 断言。
限制:仅当没有其他静态转换能发现错误时才添加接口满足性检查;不要为每个接口都加断言。当方法集分析需调整时,修改 scripts/check-interface-compliance.go。相关主题(接口命名、错误类型、泛型、函数式选项、防御性边界)参见对应关联技能。具体收费、平台与使用效果资料未提供。