前言
数组的长度是声明的时候就固定好的,后面不可能变大,而且长度和容量相等。
切片的长度和容量后面可以随着元素增多而增长,但是容量不可能小于长度。
正文
声明&初始化
在 Go 中声明即初始化,如果在声明的时候没有初始化值,那么就会赋值为声明类型的「零值」。func TestDemo1(t *testing.T) {
// 数组
var array1 [5]int // 只需设置长度,后面不可变
var array2 = new([5]int) // 返回指针
// 切片
var slice1 []int
var slice2 = make([]int, 5, 5) // 设置长度、容量,后面可变
t.Log("array1 val:", array1) // [0 0 0 0 0]
t.Log("array1 len:", len(array1)) // 5
t.Log("array1 cap:", cap(array1)) // 5
fmt.Println("")
t.Log("array2 val:", array2) // &[0 0 0 0 0]
t.Log("array2 len:", len(array2)) // 5
t.Log("array2 cap:", cap(array2)) // 5
fmt.Println("")
t.Log("slice1 val:", slice1) // []
t.Log("slice1 len:", len(slice1)) // 0
t.Log("slice1 cap:", cap(slice1)) // 0
fmt.Println("")
t.Log("slice2 val:", slice2) // [0 0 0 0 0]
t.Log("slice2 len:", len(slice2)) // 5
t.Log("slice2 cap:", cap(slice2)) // 5
}
在声明的时候就初始化:func TestDemo2(t *testing.T) {
// 数组
var array1 = [5]int{4: 1, 2: 5}
var array2 = [...]int{4: 1, 2: 5}
// 切片
var slice1 = []int{4: 1, 2: 5}
var slice2 = array1[:] // 从数组截取来的切片
t.Log("array1 val:", array1) // [0 0 5 0 1]
t.Log("array1 len:", len(array1)) // 5
t.Log("array1 cap:", cap(array1)) // 5
fmt.Println("")
t.Log("array2 val:", array2) // [0 0 5 0 1]
t.Log("array2 len:", len(array2)) // 5
t.Log("array2 cap:", cap(array2)) // 5
fmt.Println("")
t.Log("slice1 val:", slice1) // [0 0 5 0 1]
t.Log("slice1 len:", len(slice1)) // 5
t.Log("slice1 cap:", cap(slice1)) // 5
fmt.Println("")
t.Log("slice2 val:", slice2) // [0 0 5 0 1]
t.Log("slice2 len:", len(slice2)) // 5
t.Log("slice2 cap:", cap(slice2)) // 5
}
添加&更新元素值
数组因为长度固定,且的值都是初始化好了的,所以只有更新。
切片更新操作和数据一样,只不过新增元素只能通过 append() 方法。append():将