使用接口而不是具体类型,并使用嵌入式接口因此常用方法不必在两种类型中都列出:
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()
function 你只能引用方法而不是实现的字段:
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"},
}
这是完整的工作代码去游乐场.