请教一个 Golang 中进行比较的问题。
在 Golang 中 slice、map、channel 都是引用类型,因为是引用类型,所以 slice 和 map 不能使用 == 进行比较这里还能理解,可是为什么 channel 可以用 == 进行比较呢??
如下代码
package main
import "fmt"
import _ "reflect"
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
fmt.Println(ch1 == ch2)
s1 := []int{1,2}
s2 := []int{2,1}
fmt.Println(s1 == s2)
m1 := make(map[int]int)
m2 := make(map[int]int)
fmt.Println(m1 == m2)
}
输出结果为
# command-line-arguments
./gotest.go:13:20: invalid operation: s1 == s2 (slice can only be compared to nil)
./gotest.go:17:20: invalid operation: m1 == m2 (map can only be compared to nil)
代码中,slice 和 map 使用 == 进行比较都报错了,为什么 channel 没有呢???