使用接口而不是具体类型,并使用嵌入式接口,因此不必在两种类型中都列出常用方法:
type Mammal interface { GetID() int GetName() string}type Human interface { Mammal GetHairColor() string}这是基于使用嵌入式类型(结构)的代码的这些接口的实现:
type MammalImpl struct { ID int Name string}func (m MammalImpl) GetID() int { return m.ID}func (m MammalImpl) GetName() string { return m.Name}type HumanImpl struct { MammalImpl HairColor string}func (h HumanImpl) GetHairColor() string { return h.HairColor}但是,当然,在您的
Count()函数中,您只能引用方法,而不能引用实现的字段:
IDs[i] = strconv.Itoa(m.GetID()) // Access ID via the method: GetID()
并创建您的哺乳动物和人类切片:
mammals := []Mammal{ MammalImpl{1, "Carnivorious"}, MammalImpl{2, "Ominivorious"},}humans := []Mammal{ HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"}, HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"},}这是 Go Playground 上的完整工作代码。



