编辑++:
如何在Go中不重复我的代码?

type Animal interface {
    Kingdom() string
    Phylum() string
    Family() string
}

type Wolf struct {}
type Tiger struct {}

func (w Wolf) Kingdom() string {return "Animalia"}
func (w Wolf) Phylum() string {return "Chordata"}
func (w Wolf) Family() string {return "Canidae"}
我为Wolf类型实现了三种方法,并且我需要为Tiger类型实现所有方法以实现接口(interface)。但是KingdomPhylum方法对于这两种类型是相同的。是否可以为Family类型仅实现Tiger方法:
func (t Tiger) Family() string {return "Felidae"}
而不是对每种类型重复所有三种方法?
免责声明
请不要与方法中的简单字符串返回混淆,在实际情况下,我需要不同的方法实现,而不仅仅是预定义的值。使用这种愚蠢的风格,我想避免动脑筋。因此完全没有跳过方法。谢谢

最佳答案

这是经典组成:

type Wolf struct {
    Animalia
    Chordata
    Canidae
}
type Tiger struct {
    Animalia
    Chordata
    Felidae
}

type Animalia struct{}

func (Animalia) Kingdom() string { return "Animalia" }

type Chordata struct{}

func (Chordata) Phylum() string { return "Chordata" }

type Canidae struct{}

func (Canidae) Family() string { return "Canidae" }

type Felidae struct{}

func (Felidae) Family() string { return "Felidae" }

func main() {
    w := Wolf{}
    t := Tiger{}
    fmt.Println(w.Kingdom(), w.Phylum(), w.Family())
    fmt.Println(t.Kingdom(), t.Phylum(), t.Family())
}

游乐场:https://play.golang.org/p/Jp22N2IuHL

09-25 15:09