Как я могу сделать карту родительских структур в go? - PullRequest
0 голосов
/ 16 апреля 2020

Я пришел из 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: любые статьи или руководства о том, как я должен делать композицию Буду также признателен!

Спасибо!

1 Ответ

3 голосов
/ 16 апреля 2020

Вы должны использовать интерфейсы для этого. Ваша карта будет map[string]Pet, где Pet:

type Pet interface {
  // methods an implementer of Pet should have
}

Тогда ваши конкретные типы (Dog et c.) Будут реализовывать интерфейс Pet, используя правильные методы.

Для получения дополнительной информации об интерфейсах см. Обзор Go, gobyexample et c. Интерфейсы будут подробно описаны в любом вводном руководстве к Go.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...