数组 切片(slice)
数组是值类型,切片是引用类型,虽然很像,但是本质不同。使用时注意不要用错
var a [2]int 数组初始化没有赋值,打印结果 [] 空值,不为nil
fmt.Print(a)
a := [2]int{1,2} 数组初始化赋值
fmt.Print(a)
a := [2]int{1,2} 数组初始化赋值,指定数组个数
fmt.Print(a)
a := [4]int{1,2:3} 数组指定下标位置初始化,未指定下标值默认0(type []int),打印结果[1 0 3]
fmt.Print(a)
a := [...]int{1,2} 编译器会按照数量确定数组长度
fmt.Print(len(a))
type Person struct { struct 类
name string
age int
}
a := [...]Person{ 初始化Person类型数组,对于多维度数组只允许第一维度[...]
{"w",12},
{"y", 16},
}
fmt.Print(a)
数组判断 ==
a := [...]Person{
{"w",12},
{"y", 16},
}
b := [...]Person{
{"w",12},
{"y", 16},
}
fmt.Print(a == b) 打印true
print("\n",&a,"\n",&b) 打印0xc00007aee8 0xc00007aeb8 地址不同
c := [2]int{1,2}
d := [2]int{1,2}
fmt.Print(c == d) 打印true
print("\n",&c,"\n",&d) 打印0xc00007ae68 0xc00007ae58 地址不同
== 可判定数据一致性,地址不同无法用于判定对象是否是同一个
切片
var a []int 切片初始化没有赋值,打印结果 [] 空值,为nil,地址0x0
fmt.Print(a)
a := []int{1,2} 切片的初始化赋值不等于nil ,分配了内存
fmt.Print(a)
a := make([]int,0,5) 切片的初始化赋值不等于nil,分配了内存, 0 大小, 5 长度
fmt.Print(a)
a := [][]int{ 如果元素类也是切片,那就可以实现类似交错数组的功能
{1,2},
{10,20,30},
{100},
}
a[2] = append(a[2],200,300)
fmt.Print(a)
fmt.Print(a[:1]) 从头到指定索引
a := make([]int,0,5) 向切片末尾添加元素,添加元素超过5个会重新分配内存
append(b,2)
有疑问加站长微信联系(非本文作者)