请教一个 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 没有呢???
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.