📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

用 make 创建切片

创建时间2019-08-07最后修改2019-08-07原位置/程序员成长之旅/Go语言学习/笔记/字数604
目录:程序员成长之旅/Go语言学习/笔记

用 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 ]