【问题标题】:How do I declare a composite interface in Go?如何在 Go 中声明复合接口?
【发布时间】:2014-06-25 07:22:18
【问题描述】:

下面的接口定义了一组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


    【解决方案1】:

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

    type MooingAndGrazing interface {
        Mooing
        Grazing
    }
    

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

    func Milk(cow interface{Mooing; Grazing})
    

    你可以在这里试验这个例子:http://play.golang.org/p/xAODkd85Zq

    【讨论】:

    • +1 这个答案和问题本身让我想尝试 Go。
    • 美丽。和我认为应该的样子只有一个字符!只要允许,我就会接受。
    猜你喜欢
    • 2014-03-28
    • 2018-01-19
    • 2010-09-24
    • 2015-10-23
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多