我在“os/signal”包中发现了这个声明:
type Signal interface {
String() string
Signal() // to distinguish from other Stringers
}
通过添加看似无用的方法“与其他 Stringers 区分开来”可以解决哪些潜在问题?
您可以传递哪些类型给
signal.Ignore(sig os.Signal)
?如果 os.Signal
是 interface { String() string }
那么它看起来就是带有 String() string
方法的任何东西,这是错误的。在接口中添加“无用”Signal()
,可以使用的类型集就缩小了。
例如,如果您使用 gopls 查找实现该接口的类型,添加“无用”方法将导致它找到正确的类型,通常不会出现误报。
这种添加虚拟方法来约束类型的机制并不完美,但它是一个合理的实用选择。