我正在尝试拥有所有具有相同成员属性和单个方法的对象数组,但是每个对象将具有略有不同的方法。我正在努力寻找将方法分配给基于另一个字段(只是一个字符串)的实例的最佳方法。例如,我有对象
type pet struct {
breed string // cat,dog,or cow
name string
goodboy bool
speak func()
}
然后我有方法
func (p *pet) woof(){
fmt.Println("woof")
p.goodboy = true
}
func (p *pet) meow(){
fmt.Println("meow")
p.goodboy = true
}
func (p *pet) moo(){
fmt.Println("moo")
p.goodboy = true
}
我可以实例化一个宠物,并使用spot.speak = spot.woof
来轻松地为该方法分配语音。但是,我从XML文档中提取宠物并将它们存储在数组中。理想情况下,我想遍历XML文档中的所有pets并分配talk方法,然后以后可以为pets数组中的任何对象调用任何speak()
方法。最初我想创建一个映射,但是您不能在函数映射中存储接收者。这是我对工作方式的思考过程:
for _,p := range petsFromXML{
var tempPet pet
tempPet.breed = p.breed
tempPet.name = p.name
tempPet.goodboy = false
tempPet.speak = tempPet.speakMap[p.breed]
pets = append(pets,tempPet)
}
但是显然这是行不通的。我已经开始考虑各种不同的解决方法,而我只是想知道实现此目的的最佳方法是什么。