I'm coming from Java/Kotlin so I'm a bit new to the composition-over-inheritance world that Go is in :)
So in Java, I could make a
abstract class Pet
and a subclass
class Dog extends Pet
class Cat extends Pet
and then make a
Map<String, Pet> mapOfPets = HashMap();
mapOfPets.put("puppy", new Dog());
mapOfPets.put("kitty", new Cat());
From here, I'm trying to do the equivalent in Golang. Here's how my attempt is going
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
}()
I know the valid portion of the code should work, but I'm losing the content within the Dog and Cat class. How should I model the map and/or structs for me to be able to make something similar to the invalid portion of the code?
It'd be annoying creating a map for each of the 'subclasses' (which I know is the incorrect term here)
PS: any articles or guides on how I should be doing composition would be greatly appreciated too!
Thank you!