Go 语言:切片 slice


#Go 语言#


可以把 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

( 本文完 )