赞
踩
值类型:int,string,bool,float,数组,结构体;
引用类型:切片,channel,map,接口类型,函数,指针。
对于引用类型的变量如果只是var定义变量并且没有分配内存赋值,那么就是nil。
s1 := make([]int, 10) var s2 []int fmt.Println(s1 == nil) // false fmt.Println(s2 == nil) // true mp1 := make(map[int]int) var mp2 map[int]int fmt.Println(mp1 == nil) // false fmt.Println(mp2 == nil) // true ch1 := make(chan int, 5) var ch2 chan int fmt.Println(ch1 == nil) // false fmt.Println(ch2 == nil) // true var i interface{} var j interface{} j = 5 fmt.Println(i == nil) // true fmt.Println(j == nil) // false
结论:
函数类型、map 类型和切片只支持与 nil的比较,而不支持同类型两变量的比较,否则会编译报错。
channel类型,interface类型、数组类型支持两个相同变量比较。
struct比较特殊,一定情况下可以进行等值比较。
原因:
切片可以通过下面的操作使用,也可以make函数创建切片变量并初始化。
var s []int
s = append(s, 100)
map不能直接var定义完后使用,需要make函数初始化才能使用。
channel也不能不能直接var定义完后使用,需要make函数初始化才能使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。