1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
問題是您有一個(gè)SetName()具有指針接收器的方法:
func (m *MammalImpl) SetName(s string)
因此,如果您有一個(gè) type 值,則該值MammalImpl的方法集不包含該SetName()方法,因此它不實(shí)現(xiàn)該Mammal接口。
但是指向MammalImpl( *MammalImpl)的指針的方法集將包含該SetName()方法,因此它將實(shí)現(xiàn)該Mammal接口。
因此,當(dāng)您填充mammals切片時(shí),您必須用*MammalImpl值填充它,因?yàn)檫@是實(shí)現(xiàn)切片元素類型(即Mammal)的值。MammalImpl如果您已經(jīng)有一個(gè)MammalImpl值,您可以輕松獲得指向 a 的指針:使用地址&運(yùn)算符生成指向該值的指針:
mammals := []Mammal{
&MammalImpl{1, "Carnivorious"},
&MammalImpl{2, "Ominivorious"},
}
在Go Playground上試試你修改過的程序。
- 1 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)