如何在 go 中制作父结构图?
How can I make a map of parent structs in go?
我来自 Java/Kotlin,所以我对 Go 所处的组合继承世界有点陌生:)
所以在 Java 中,我可以制作一个
abstract class Pet
还有一个子class
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
}()
我知道代码的 有效 部分应该可以工作,但我丢失了 Dog 和 Cat class 中的内容。我应该如何为地图 and/or 结构建模,以便能够制作类似于代码的 invalid 部分的内容?
为每个 'subclasses' 创建地图会很烦人(我知道这里的术语不正确)
PS:任何关于我应该如何进行作文的文章或指南也将不胜感激!
谢谢!
您应该为此使用 接口。您的地图将是 map[string]Pet
,其中 Pet
是:
type Pet interface {
// methods an implementer of Pet should have
}
那么您的具体类型(Dog
等)将通过正确的方法实现 Pet
接口。
有关接口的更多信息,请参阅 Tour of Go, gobyexample 等。接口将在 Go 的任何介绍性指南中进行广泛描述。
我来自 Java/Kotlin,所以我对 Go 所处的组合继承世界有点陌生:)
所以在 Java 中,我可以制作一个
abstract class Pet
还有一个子class
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
}()
我知道代码的 有效 部分应该可以工作,但我丢失了 Dog 和 Cat class 中的内容。我应该如何为地图 and/or 结构建模,以便能够制作类似于代码的 invalid 部分的内容?
为每个 'subclasses' 创建地图会很烦人(我知道这里的术语不正确)
PS:任何关于我应该如何进行作文的文章或指南也将不胜感激!
谢谢!
您应该为此使用 接口。您的地图将是 map[string]Pet
,其中 Pet
是:
type Pet interface {
// methods an implementer of Pet should have
}
那么您的具体类型(Dog
等)将通过正确的方法实现 Pet
接口。
有关接口的更多信息,请参阅 Tour of Go, gobyexample 等。接口将在 Go 的任何介绍性指南中进行广泛描述。