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

Interface 如何在Go中声明复合接口?,interface,go,Interface,Go,以下接口定义了一组通过moing对象实现的方法: type Mooing interface { Moo() string } type Grazing interface { EatGrass() } 下面定义了一组通过掠掠对象实现的方法: type Mooing interface { Moo() string } type Grazing interface { EatGrass() } 我有一个作用于奶牛的功能: func Milk(cow *Co

以下接口定义了一组通过moing对象实现的方法:

type Mooing interface {
    Moo() string
}
type Grazing interface {
    EatGrass()
}
下面定义了一组通过掠掠对象实现的方法:

type Mooing interface {
    Moo() string
}
type Grazing interface {
    EatGrass()
}
我有一个作用于奶牛的功能:

func Milk(cow *Cow)
不过,它不一定是一头母牛——任何符合
哞哞叫
放牧
的条件都足够接近了。在Go中,是否可以指定一个参数
系泊和放牧
?在伪代码中,类似于以下内容

func Milk(cow {Mooing, Grazing})

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

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

type MooingAndGrazing interface {
    Mooing
    Grazing
}
如果不想声明新的命名类型,可以将其内联为:

func Milk(cow interface{Mooing; Grazing})

你可以在这里尝试这个例子:

+1这个答案和问题本身让我想试试Go.Beautiful。而且只有一个角色和我想象的相距甚远!只要我同意,我就接受。