interface - 如何在 Go 中声明复合接口(interface)?

标签 interface go

以下接口(interface)定义了一组由 mooing 对象实现的方法:

type Mooing interface {
    Moo() string
}

下面定义了一组放牧对象要实现的方法:

type Grazing interface {
    EatGrass()
}

我有一个作用于奶牛的函数:

func Milk(cow *Cow)

不过,它不一定是奶牛——任何符合 MooingGrazing 的都足够接近了。在 Go 中,是否可以指定 Mooing and Grazing 的参数?在伪代码中,类似于以下内容?

func Milk(cow {Mooing, Grazing})

换句话说,只有同时满足这两个接口(interface)的参数才会被接受。

最佳答案

您可以按如下方式在 Go 中组合接口(interface):

type MooingAndGrazing interface {
    Mooing
    Grazing
}

如果您不想声明一个新的命名类型,您可以将其内联为:

func Milk(cow interface{Mooing; Grazing})

您可以在此处试验此示例:http://play.golang.org/p/xAODkd85Zq

关于interface - 如何在 Go 中声明复合接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23532653/

相关文章:

ios - UIView 在设置宽度等于 scrollview 时忽略了我的约束?

接口(interface)的 Javadoc 注释?

google-app-engine - GAE Golang - 查询在保存后不立即返回数据

go - x509 Go 包 - ParsePKIXPublicKey 是 DER 还是 PEM?

for-loop - 使用 for 循环的新手

node.js - 是否可以在 go 中编写 node.js 插件?

go - 尝试恢复 Websocket 连接

c# - 如何在另一个窗体(如 Visual Studio)中显示窗体

c# - 如何根据字符串动态调用类?

java - 使用抽象类和接口(interface)