可以把 slice 理解为可在运行时指定长度的数组。和数组最大的区别是中括号[]
中不指定长度。
示例1: 指定切片长度
package main
import "fmt"
func main() {
var a []int = make([]int, 6)
fmt.Printf("类型:%T 值:%v 长度:%v 容量:%v\n", a, a, len(a), cap(a))
}
运行结果:
类型:[]int 值:[0 0 0 0 0 0] 长度:6 容量:6
示例2: 运行时指定切片长度
package main
import "fmt"
func main() {
sliceLen := 2*8
var a = make([]int, sliceLen)
a[1] = 12
a[8] = 14
fmt.Printf("类型:%T 值:%v 长度:%v 容量:%v\n", a, a, len(a), cap(a))
}
运行结果:
类型:[]int 值:[0 12 0 0 0 0 0 0 14 0 0 0 0 0 0 0] 长度:16 容量:16
示例3: 通过 append 追加元素
package main
import "fmt"
func main() {
var a = make([]int, 4)
a[1] = 12
fmt.Printf("类型:%T 值:%v 地址:%p 长度:%v 容量:%v\n", a, a, &a, len(a), cap(a))
a = append(a, 100)
fmt.Printf("类型:%T 值:%v 地址:%p 长度:%v 容量:%v\n", a, a, &a, len(a), cap(a))
b := append(a, 101)
fmt.Printf("类型:%T 值:%v 地址:%p 长度:%v 容量:%v\n", b, b, &b, len(b), cap(b))
}
运行结果:
类型:[]int 值:[0 12 0 0] 地址:0xc00008e000 长度:4 容量:4
类型:[]int 值:[0 12 0 0 100] 地址:0xc00008e000 长度:5 容量:8
类型:[]int 值:[0 12 0 0 100 101] 地址:0xc00000c060 长度:6 容量:8