用 make 创建切片
用 make 创建切片
切片可以用内建函数 make 来创建,这也是你创建动态数组的方式。
make 函数会分配一个元素为零值的数组并返回一个引用了它的切片: a := make([]int, 5) // len(a)=5 并自动生成cap长度
要指定它的容量,需向 make 传入第三个参数: b := make([]int, 0, 5) // len(b)=0, cap(b)=5
b = b[:cap(b)] // len(b)=5, cap(b)=5 b = b[1:] // len(b)=4, cap(b)=4
来源: https://tour.go-zh.org/moretypes/13 package main import ( "fmt" ) func main() { t:=make([]int,5) printSlicea("t",t) t1:=make([]int,10) printSlicea("t1",t1) t2:=make([]int,10,20) printSlicea("t2",t2) t3:=make([]int,0,20) printSlicea("t3",t3) t4:=make([]int,20,0)//在编译阶段就报错 printSlicea("t4",t4) } func printSlicea(s string, x []int) { fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x) } //结果 t len=5 cap=5 [0 0 0 0 0] t1 len=10 cap=10 [0 0 0 0 0 0 0 0 0 0] t2 len=10 cap=20 [0 0 0 0 0 0 0 0 0 0] t3 len=0 cap=20 []
x
1 package
main 2 3 import ( 4
"fmt" 5 ) 6 7 func
main () { 8
t :
make ([] int , 5 ) 9
printSlicea ( "t" , t ) 10
t1 :
make ([] int , 10 ) 11
printSlicea ( "t1" , t1 ) 12
t2 :
make ([] int , 10 , 20 ) 13
printSlicea ( "t2" , t2 ) 14
t3 :
make ([] int , 0 , 20 ) 15
printSlicea ( "t3" , t3 ) 16
t4 :
make ([] int , 20 , 0 ) //在编译阶段就报错 17
printSlicea ( "t4" , t4 ) 18 19 } 20 func
printSlicea ( s
string , x [] int ) { 21
fmt . Printf ( "%s len=%d cap=%d %v\n" , 22
s , len ( x ), cap ( x ), x ) 23 } 24 25 //结果 26 t
len
5
cap
5 [ 0
0
0
0
0 ] 27 t1
len
10
cap
10 [ 0
0
0
0
0
0
0
0
0
0 ] 28 t2
len
10
cap
20 [ 0
0
0
0
0
0
0
0
0
0 ] 29 t3
len
0
cap
20 [] package main import "fmt" func main() { a := make([]int, 5) printSlice("a", a) b := make([]int, 0, 5) printSlice("b", b) c := b[:2] printSlice("c", c) d := c[2:5] printSlice("d", d) } func printSlice(s string, x []int) { fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x) } //结果 a len=5 cap=5 [0 0 0 0 0] b len=0 cap=5 [] c len=2 cap=5 [0 0] d len=3 cap=3 [0 0 0]
23
1 package
main 2 3 import
"fmt" 4 5 func
main () { 6
a :
make ([] int , 5 ) 7
printSlice ( "a" , a ) 8 9
b :
make ([] int , 0 , 5 ) 10
printSlice ( "b" , b ) 11 12
c :
b [: 2 ] 13
printSlice ( "c" , c ) 14 15
d :
c [ 2 : 5 ] 16
printSlice ( "d" , d ) 17 } 18 19 func
printSlice ( s
string , x [] int ) { 20
fmt . Printf ( "%s len=%d cap=%d %v\n" , 21
s , len ( x ), cap ( x ), x ) 22 } 23 24 //结果 25 a
len
5
cap
5 [ 0
0
0
0
0 ] 26 b
len
0
cap
5 [] 27 c
len
2
cap
5 [ 0
0 ] 28 d
len
3
cap
3 [ 0
0
0 ]