27 Go 语言中的切片
优质
小牛编辑
129浏览
2023-12-01
本位主要介绍一下 Go 语言中可变长度的"数组"——切片(slice)。数组有数组的用处,但是其不可变长度的特性,注定了在大多场景下不是很受欢迎。在大多数场景下我们都会选择更加灵活的切片。
1. 切片的创建
切片的声明方式和数组类似,写法上看就是声明一个没有长度的数组:var 切片名 []切片类型
。其中切片类型可以是切片本身,也就是切片的切片,就构成了多维的切片。
切片在使用之前必须要初始化,它没有零值。声明后它的值是 nil,这是因为它的底层实现是一个指向数组的指针,在你给它存入一个数组的地址之前,它只能是 nil。
代码示例:
package main
import (
"fmt"
)
func main() {
var a []int
fmt.Println("初始化前:", a)
a = make([]int, 5, 10)
fmt.Println("初始化后:", a)
a[4] = 5
fmt.Println(" 赋值后:", a)
a[5] = 6
fmt.Println("赋值后:", a)
}
- 第 8 行:声明一个int类型的切片。
- 第 10 行:声明一个长度为5,切片容量为10的切片。其中容量可以不传,默认会和长度相等。长度为切片真正有值的位置,会初始化零值。
- 第 12 行:给切片的第 5 个位置赋值。
- 第 14 行:给切片的第 6 个位置赋值,但是切片的长度为5,所以会报越界的错误。
执行结果:
2. 切片的截取
切片之所以被叫做切片是有原因的,它可以从任意长度开始切,切到任意长度为止,然后这一段拿出来就是一个新的切片。切割形式为切片名(s)[起始下标(begin):结束下标(end):最大容量(max)]
。
Tips:截取到的切片包含起始下标(begin),不包含结束下标(end)。
切片截取形式表
操作 | 含义 |
---|---|
s[begin
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。绑定邮箱获取回复消息由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的
隐私政策
了解更多相关信息。 单击“接受”或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文
×
|
发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。