Arrays Go中的切片类型无法进行比较的根本原因是什么?

Arrays Go中的切片类型无法进行比较的根本原因是什么?,arrays,go,slice,Arrays,Go,Slice,我编写了一个代码,希望检查两个切片的相等性,如: package main import ( "fmt" ) func main() { s := []int{1, 2, 3} s2 := []int{1, 2, 3} fmt.Println(s == s2) } 当我运行这个示例代码来比较两个切片时,会出现错误slice只能与nil进行比较。我搜索并发现()我需要自己进行比较,但与我们对数组的比较不同的切片类型不可用的根本原因是什

我编写了一个代码,希望检查两个切片的相等性,如:

package main

import (
    "fmt"
)

func main() {
    s := []int{1, 2, 3}

    s2 := []int{1, 2, 3}

    fmt.Println(s == s2)

}

当我运行这个示例代码来比较两个切片时,会出现错误
slice只能与nil进行比较。我搜索并发现()我需要自己进行比较,但与我们对数组的比较不同的切片类型不可用的根本原因是什么?

如果元素相等,或者如果支持数组相等,或者如果标头相等,切片是否相等?没有正确的答案,因此未定义。@rezakamalifard忽略切片比较不是错误。由于JimB所述的原因,语言设计者将其遗漏。如果实现了
==
,您可以使用
reflect.DeepEqual
@rezakamalifard,您希望它输出
true
还是
false
:(假设它们具有相同的元素)@rezakamalifard数组和切片之间的区别在于,有一种方法可以定义数组的
=
,有三种方法可以定义切片的
=