【初探Go语言】Go 语言之切片

作者: hedeqiang

发布时间: 2021-06-12 21:03:03

什么是切片

回顾上节,我们说了 Go 语言中的数组,数组是具有固定长度且长度为 0 个或多个相同数据类型的元素的集合。

与数组不同的是,切片没有长度,可以理解为动态的数组,另外切片的长度是可变的,可以随着程序的运行进行动态的扩充。

初始化切片

申明切片

var ages []int

声明并赋值

var name = []string{"PHP","Go"}

name := []string{"PHP","Go"}

使用 make 函数创建切片

格式为: make([]T, length, capacity)

创建一个长度为 5 的切片

name := make([]int,5)

创建一个初始长度为 5、容量为 10 的整型切片

name := make([]int,5,10)

基于数组来创建切片

// 先定义一个数组
names := [...]string{"PHP", "Go", "Python", "Java"}

// 基于数组创建切片
name := names[1:4] 

fmt.Println(name) // [Go Python Java]

在 Go 语言中支持通过 array[start:end] 这样的方式基于数组生成一个切片,start 表示切片在数组中的下标起点,end 表示切片在数组中的下标终点,Go 语言的切片原则 左含有不含

另外几个 也需要记住 例如:

# 全部从 0 开始,到结束
name := names[:]
fmt.Println(name)  // [PHP Go Python Java]

# 索引从 0 开始 ,到索引为 3 结束
name := names[:3]
fmt.Println(name)  // [PHP Go Python]

# 从索引 3 开始
name := names[3:]
fmt.Println(name)  // [Java]

遍历切片

切片和数组类似,几乎所有的操作数组的方式 对于切片都可以运行。 使用 for 循环进行遍历

name := []int{1,2,3,3,4}
for i :=0;i<len(name);i++ {
    fmt.Println(i,name[i])
}

其结果如下:

0 1
1 2
2 3
3 3
4 4

使用 range 进行遍历

name := []int{1,2,3,3,4}
for index, item := range name {
    fmt.Println(index,item)
}

可以看到使用 range 操作更加简单方便。

在切片中添加元素

开头 我们说过切片的长度是不固定的,可以随意的进行扩容,所以我们可以在一个已有的切片中 动态的添加新的元素。

首先,我们可以使用 append 函数可以添加元素至切片的末尾

name := []string{"PHP","Go"}
name = append(name,"Java")
fmt.Println(name)  // [PHP Go Java]

我们也可以创建一个空的切片,在程序运行时动态的添加元素

var name []string
name = append(name,"PHP")
name = append(name,"Go")
fmt.Println(name)   // [PHP Go]

以上 append 其实可以合并成一行

var name []string
name = append(name,"PHP","Go","Java")
fmt.Println(name)  // [PHP Go Java] 

修改切片元素

修改切片很简单,只需要指定要修改切片的名称和要修改元素的索引下标即可。之后给该元素赋值新的值即可。

name := []string{"PHP","Go"}
name[0] = "Java"
fmt.Println(name)  // [Java Go]

删除切片元素

找到要删除元素前面的切片,找到要删除元素后面的切片,将两个切片组合起来即可达到删除元素的效果。

name := []string{"PHP","Go","Java","Python"}

name1 := append(name[:2],name[3:]...)
fmt.Println(name1)

切片间的拷贝操作 复制切片

copy 函数用于将一个切片拷贝到另一个切片当中

name1 := []string{"PHP"}
name2 := []string{"Go"}
copy(name1,name2)
fmt.Println(name1) // Go
fmt.Println(name2) // Go

len 函数和 cap 函数

我们可以使用 len() 来获取切片的长度,cap() 函数获取切片的容量

name := []string{"PHP","Go","Java","Python"}
fmt.Println(len(name),cap(name)) 

以上 name 切片长度为 4,容量为 4。

关于极客返利

极客返利 是由我个人开发的一款网课返利、返现平台。包含 极客时间返现、拉勾教育返现、掘金小册返现、GitChat返现。目前仅包含这几个平台。后续如果有需要可以考虑其他平台。 简而言之就是:你买课,我返现。让你花更少的钱,就可以买到课程。

https://geek.laravelcode.cn

https://geek.idaka.ink

版权许可

本作品采用 知识共享署名 4.0 国际许可协议 进行许可。

转载无需与我联系,但须注明出处,注明文章来源 【初探Go语言】Go 语言之切片