Я пытаюсь получить массив объектов, которые имеют одинаковые свойства-члены и один метод, однако у каждого объекта будет свой метод. Я изо всех сил пытаюсь найти лучший способ назначить метод экземпляру на основе другого поля, которое является просто строкой. Например, у меня есть объект
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 и назначить метод speak, а затем иметь возможность вызывать любой метод speak()
для любого объекта в массиве pets. Сначала я думал о создании карты, но вы не можете хранить приемники на карте функций. Это был мой мыслительный процесс для чего-то вроде того, как это должно работать:
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)
}
, но, очевидно, это не работает. Я уже начал думать о различных обходных путях, и мне просто интересно, как лучше всего это сделать.