为什么 os.Signal 接口包含一个明显无用的方法?

问题描述 投票:0回答:1

我在“os/signal”包中发现了这个声明:

type Signal interface {
    String() string
    Signal() // to distinguish from other Stringers
}

通过添加看似无用的方法“与其他 Stringers 区分开来”可以解决哪些潜在问题?

go interface
1个回答
4
投票

您可以传递哪些类型给

signal.Ignore(sig os.Signal)
?如果
os.Signal
interface { String() string }
那么它看起来就是带有
String() string
方法的任何东西,这是错误的。在接口中添加“无用”
Signal()
,可以使用的类型集就缩小了。

例如,如果您使用 gopls 查找实现该接口的类型,添加“无用”方法将导致它找到正确的类型,通常不会出现误报。

这种添加虚拟方法来约束类型的机制并不完美,但它是一个合理的实用选择。

© www.soinside.com 2019 - 2024. All rights reserved.