什么是切片
回顾上节,我们说了 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返现。目前仅包含这几个平台。后续如果有需要可以考虑其他平台。 简而言之就是:你买课,我返现。让你花更少的钱,就可以买到课程。
版权许可
本作品采用 知识共享署名 4.0 国际许可协议 进行许可。转载无需与我联系,但须注明出处,注明文章来源 【初探Go语言】Go 语言之切片
联系我
