编译时检查类型是否满足接口
接口和实现(实现接口的类型)是分离的。因此,如果类型实现接口,如何在编译时检查是一个合法的问题。
要求编译器检查 T
类型实现接口 I
的一种方法是尝试使用 T
的零值或 T
的指针进行赋值。我们可以选择分配空白标识符以避免不必要的垃圾:
type T struct{}
var _ I = T{} // Verify that T implements I.
var _ I = (*T)(nil) // Verify that *T implements I.
如果 T
或*T
没有实现 I
,那将是编译时错误。
这个问题也出现在官方 FAQ 中: 我如何保证我的类型满足界面?