我正在深入研究 Go 架构,但我遇到了多态性问题。我简化了问题并为此示例创建了新数据,以便更容易理解我的问题。
我有这样的结构:
type Animal interface {
speak() string
}
type Cat struct {
Name string
}
type Dog struct {
Race string
}
我希望结构实现接口,我是这样进行的:
func (c Cat) speak() string {
return "Miaw!"
}
func (d Dog) speak() string {
return "Guau!"
}
func speak(a Animal) string {
return a.speak()
}
func speaks(a []Animal) string {
str := ""
for i := 0; i < len(a); i++ {
str += a[i].speak()
}
return str
}
所以我创建的是:该方法speak接收一个Animal并执行方法讲述给定的结构 ( Animal,即Cator Dog),并且该方法speaks接收一个切片Animal并执行该切片的每个索引中给出的结构的方法 ( Animal,即Cat或Dog)。
为了测试这些方法,我实现了这个功能:
func test() {
cat1 := Cat{
Name: "Cat1",
}
cat2 := Cat{
Name: "Cat2",
}
cat3 := Cat{
Name: "Cat3",
}
arrayCats := []Cat{cat1, cat2, cat3}
speak(cat1)
speak(cat3)
speak(cat2)
speaks(arrayCats) //This line gives an error to the Compiler
}
我上传编译器给我的错误:
错误_编译器
有人可以向我解释为什么我可以在只接收一个元素的函数中使用 polimorfish,为什么不能在接收该元素的一部分的函数中使用?
我真的需要找到这个问题的解决方案来在我的应用程序的不同部分实现它,我不知道如何解决这个问题,也不知道如何实现一个实用且可扩展的解决方案(实际应用程序中的切片将包含一个高元素的数量)。
我发现这个相关的答案对于了解更多我的问题很有用,但我仍然不明白问题是什么或解决方案: Answer1 Answer2 Answer3
呼唤远方
慕工程0101907
相关分类