接口定义中有多种方法可以吗?

时间:2014-05-26 02:06:15

标签: go

在构建界面时,常见示例如下:

type Notifier interface {
    Notify()
}

文档看到说像...这样的东西添加'呃'类型名称的动词版本。现在,由于方法名称和接口名称相似,因此定义中的多个方法没有意义。

我正在尝试:

type Commander interface {
    Command()
    Notify()
}

它可以用你所期望的所有奇怪的方式运作,但它似乎是错误的,没有什么能阻止我这样做。我只是不确定我是否应该链接命令以及代码中可能更深层次的内容。

type Commander interface {
    Command()
}

type Notifier interface {
    Notify()
}

但是调用我的函数的想法是:

DoStuff(c, n)

当实现两个接口的单个​​参数也有意义时。

2 个答案:

答案 0 :(得分:4)

这完全没问题,它也出现在标准库中的几个地方(例如http://golang.org/pkg/io/#ReadWriter)。

它们是应该在单个接口还是两个接口中取决于它是否有意义或者是否有用于实现一个类型而不是另一个类型。

答案 1 :(得分:3)

一种方法是像标准库中的ReadWriter一样进行。

定义一个界面:

type Commander interface {
    Command()
}

和另一个:

type Notifier interface {
    Notify()
}

然后将您想要的类型作为参数:

type CommandNotifier interface {
    Commander
    Notifier
}

最后定义你的功能:

func DoStuff(cn CommandNotifier) {
    // TODO - do stuff
}