我有一个特定的 Go 语言结构对象,我正在与之交互,我希望它与自身相同。我将函数传递给一个简单地返回它的函数,但它通过接受 interface{} 输入/输出来实现
type Animal struct {
name string
food interface{}
}
type YummyFood {
calories int
}
func echo_back(input interface{}) interface{} {
return input
}
func main() {
var tiger_food = Food{calories: 1000}
var tiger = Animal{name: "Larry", food: tiger_food}
output_tiger := echo_back(tiger)
fmt.Printf("%T, %+v\n", tiger, tiger)
fmt.Printf("%T, %+v\n", output_tiger, output_tiger)
fmt.Println(tiger == output_tiger)
fmt.Println(tiger == output_tiger.(Animal))
}
运行此程序,您会看到tiger 和 output_tiger 看起来相同并且计算结果相等。伟大的。这就是我所期望的。现在,尝试将这个定义用于 YummyFood
type YummyFood {
calories int
ingredients []string
}
突然之间,echo_back 的输出与输入的评估结果不一样,即使使用类型断言也是如此。我得到“ panic :运行时错误:比较无法比较的类型 YummyFood”
问题是为什么添加[]string类型会导致输入和输出无法比?如何修改 output_tiger 以取回我放入的相同内容(即我希望它与“tiger”相同)。如何反射(reflect) output_tiger 以使其等于老虎?
最佳答案
它不会很快,但你可以使用 reflect.DeepEqual()比较 slice (或只是 YummyFood)。它会循环遍历它以比较所有元素。您可能可以创建一个更有效的功能来执行此操作,但如果那里的功能足够快,您将为自己节省一些工作,也许还有一些错误。 :-)
关于go - 使用 []string 字段时出现无法比较的类型错误(Go lang),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15893250/