如何在Go中声明复合接口?

时间:2014-05-08 04:18:26

标签: interface go

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

type Mooing interface {
    Moo() string
}

以下定义了一组通过放牧对象实现的方法:

type Grazing interface {
    EatGrass()
}

我有一个在奶牛上运作的功能:

func Milk(cow *Cow)
但是,它并不一定是一头牛 - 任何符合MooingGrazing的东西都足够接近。在Go中,是否可以指定Mooing and Grazing的参数?在伪代码中,如下所示?

func Milk(cow {Mooing, Grazing})

换句话说,只接受满足这两个接口的参数。

1 个答案:

答案 0 :(得分:19)

您可以按如下方式在Go中编写接口:

type MooingAndGrazing interface {
    Mooing
    Grazing
}

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

func Milk(cow interface{Mooing; Grazing})

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