Go语言基础3 | 青训营笔记

67 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第3天

基础语法

切片

在正式的业务代码里,我们一般很少直接去用数组,因为它的长度是固定的。我们更多的时候用的是切片。切片不同于数组,它是可变长度的数组。可以在任意时刻去更改长度,切片拥有更多丰富的操作。Go的切片slice有点类似C++中的vector,好像每种语言都有这种类似的东西。

首先下面是最简单的声明一个切片,切片的长度为3,容量也为3,类型为string

s := make([]string, 3)

下面是声明长度为1,容量为5的切片

s := make([]string, 1, 5)

注意,切片的容量与长度不是一个东西,长度是切片当前的长度(实际的),容量就是切片的实际长度达到这个容量时,切片就会扩大,所以是可变长度的。

下面是对切片内的元素进行赋值,这里的写法和数组很像。

s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2])    // c
fmt.Println("len:", len(s))  // 3

下面展示了可以使用append()对切片添加新元素,有点类似于C++中vectorpush_back()方法

s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s)  // [a, b, c, d, e, f]

可以用copy方法复制一个切片内的元素。使用len方法可以获得切片的长度。

c := make([]string, len(s))
copy(c, s)
fmt.Println(c)  // [a, b, c, d, e, f]

下面是切片的截取连续部分元素的操作,:左右的数字是类似区间左右端点索引,例如2:5就是从2位置到5位置的元素。如果左边数字省略,就从头开始;如果右边数字省略,就一直到结尾结束。(不包括5位置的元素,左闭右开

fmt.Println(s[2:5])  // [c, d, e]
fmt.Println(s[:5])  // [a, b, c, d, e]
fmt.Println(s[2:])  // [c, d, e, f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good)  // [g, o, o, d]