Я пришел из Java / Kotlin, поэтому я немного новичок в мире композиции-наследования, в котором находится Go :)
Так что в Java я мог бы сделать
abstract class Pet
и подкласс
class Dog extends Pet
class Cat extends Pet
, а затем сделать
Map<String, Pet> mapOfPets = HashMap();
mapOfPets.put("puppy", new Dog());
mapOfPets.put("kitty", new Cat());
Отсюда я Я пытаюсь сделать эквивалент в Golang. Вот как проходит моя попытка
struct Pet{
// ...
}
struct Dog{
Pet
}
struct Cat{
Pet
}
func () {
petMap := make(map[string]*Pet)
//invalid
petMap["puppy"] = &Dog{ ... }
petMap["kitty"] = &Cat{ ... }
// valid
puppy2 := &Dog{ ... }
kitty2 := &Cat{ ... }
petMap["puppy2"] = &puppy2.Pet
petMap["kitty2"] = &kitty2.Pet
}()
Я знаю, что часть кода valid должна работать, но я теряю содержимое в классе Dog и Cat. Как мне смоделировать карту и / или структуры, чтобы я мог сделать что-то похожее на неверный фрагмент кода?
Было бы неудобно создавать карту для каждого из «подклассов» (здесь я знаю, что это неправильный термин)
PS: любые статьи или руководства о том, как я должен делать композицию Буду также признателен!
Спасибо!