如何在Go语言中声明一个复合接口?

9
以下接口定义了一组方法,需要由“哞”声对象实现:
type Mooing interface {
    Moo() string
}

以下定义了一组由牧场对象实现的方法:
type Grazing interface {
    EatGrass()
}

我有一个操作奶牛的函数:

func Milk(cow *Cow)

不过,它不一定非得是一头牛--任何符合 MooingGrazing 的东西都可以。在 Go 语言中,是否可以指定一个参数为 Mooing and Grazing?伪代码示例如下:

func Milk(cow {Mooing, Grazing})

换句话说,只有同时符合这两个接口的参数才会被接受。
1个回答

28
你可以按照以下方式在Go中编写接口:
type MooingAndGrazing interface {
    Mooing
    Grazing
}

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

func Milk(cow interface{Mooing; Grazing})

你可以在这个例子中进行实验: http://play.golang.org/p/xAODkd85Zq

5
+1 这个答案和问题本身让我想尝试一下Go。 - Jonathon Reinhart
太棒了。只有一个字符与我想象中的样子相差不远!一旦SO允许,我就会接受它。 - Brian Gesiak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接