【Go语言基础入门|青训营笔记】

92 阅读2分钟

【Go语言基础入门|青训营笔记】

今天主要写有关切片的部分知识,是个人学习中遇到或者了解的一部分东西

Slice(切片),个人认为类似于数组,两者很相像,像是没有固定长度数组,一般slice类型写作[]A,其中A代表slice中元素的类型,slice的语法和数组很像,用法也大概相同

一个slice由三个部分构成:指针、长度和容量。指针指向第一个slice元素对应的底层数组元素的地址,长度和容量之间就是,容量可以理解为最大容积,而长度可以理解为slice切片中元素的长度或者数目,分别可以使用len()和cap()来返回长度和容量

slice切片的的基本格式是[low:high:max],其中

low:下标的起点;

high:下标的终点,不包括此下标 len = high - low;

cap: cap = max - low;

其声明可以是下面这种常见的方式 months := [...]string{1: "One", /* ... */, 12: "Twelve"}

下面将介绍其他的声明方式并标注其用法

借助make函数, 格式化make(切片类型,长度,容量)

s2 := make([]int, 6, 10)
fmt.Printf("len(s2) = %d, cap(s2) = %d\n\n", len(s2), cap(s2))

这种方式是最为常见的格式化切片的操作,借助make函数来实现

没有指定容量,容量和长度一样

s3 := make([]int, 5)
fmt.Printf("len(s2) = %d, cap(s2) = %d\n", len(s3), cap(s3))

下面将介绍切片的截取

首先定义一个切片叫array[ ]

array := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

此操作是不指定长度和容量,此时长度和从良一致[0:len(array):len(array)]

s1 := array[:] 
fmt.Println("s1 = ", s1)
fmt.Printf("len = %d,cap = %d", len(s1), cap(s1))

然后是两种常用的切片操作

s3 := array[:6] 
fmt.Println("s3 = ", s3)
fmt.Printf("len = %d,cap = %d", len(s3), cap(s3))
fmt.Println()

上面这种是从0开始,取6-0个元素,为a[0,1,2,3,4,5],len=6,cap是10

s4 := array[3:] // 从下标为3开始,到结尾
fmt.Println("s4 = ", s4)
fmt.Printf("len = %d,cap = %d", len(s4), cap(s4))
fmt.Println()

上面这种是从下标为3开始,取到结尾