使用[]字符串字段时出现不可压缩类型错误(Go lang)

使用[]字符串字段时出现不可压缩类型错误(Go lang),go,Go,我有一个特定的Go-lang结构对象,我正在与之交互,我希望它与自身相等。我将函数传递给一个函数,该函数只返回它,但它通过接受接口{}输入/输出来实现 type Animal struct { name string food interface{} } type YummyFood { calories int } func echo_back(input interface{}) interface{} { return input } func mai

我有一个特定的Go-lang结构对象,我正在与之交互,我希望它与自身相等。我将函数传递给一个函数,该函数只返回它,但它通过接受接口{}输入/输出来实现

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看起来是相同的,并且计算结果是相等的。伟大的这就是我所期望的。现在,试着用这个定义来定义美味食品

type YummyFood {
    calories int
    ingredients []string
}
突然之间,echo_back的输出计算结果与输入不一样,即使使用类型断言也是如此。我得到“恐慌:运行时错误:比较不可压缩类型YummyFood”

问题是为什么添加[]字符串类型会导致输入和输出不可压缩?我如何修改输出_tiger以返回我输入的相同内容(即我希望它与“tiger”相同)。如何反映tiger的输出,使其与tiger相等

切片(
[]字符串
)未定义相等项。包含定义了相等的成员的数组和结构将定义相等

请注意,对于切片,等式仍然没有定义,对于切片,计算通常是不可行的。还请注意,结构和数组的有序比较运算符(<>=)仍然没有定义


它不会很快,但是你可以用它来比较切片(或者仅仅是美味食品)。它通过循环来比较所有元素。您可能会制作一个更高效的函数来执行此操作,但如果其中的一个函数足够快,您将节省一些工作和可能的一些错误。:-)

是什么使Go切片不同于其他语言中有相等运算符的无数其他动态数组?C++ STL容器具有相等的运算符、java、js,列表继续进行。我只是好奇,为什么围棋设计师选择不解决一个似乎完全可以解决的问题。