标准答案
- 只有动态类型和值都为空时 interface 才等于 nil。
- 把 nil 指针赋给 interface 后,interface 可能包含类型信息而不等于 nil。
- 类型断言可使用 comma-ok 形式避免不匹配 panic,错误接口要保持一致的语义。
- 接口应表达行为边界,过大的接口和隐式实现会增加替换与排查成本。
题目解析
interface 由动态类型和值组成,只有两者都为空时才等于 nil。把 nil 指针赋给 interface 后,动态类型仍存在,因此接口可能不为 nil。
返回 error 或 mock 时要检查真实赋值路径,类型断言优先使用 comma-ok 或 errors.As,避免把输入不符合预期变成 panic。
接口应表达稳定的消费行为,小接口便于替换和测试;过大的接口会扩大实现负担,也让 nil 和动态类型边界更难排查。
常见误区
- 误区:只判断 interface != nil 就认为对象存在。改正:还要判断动态值是否为 nil,并设计明确的空值语义。
- 误区:类型断言失败直接 panic。改正:使用 comma-ok 或返回可判断错误,除非不变量已在边界保证。
- 误区:接口包含大量无关方法。改正:按调用方需要拆分小接口,避免抽象先于真实行为。