AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
### 概述 数组的长度在定义后无法再次修改,数组是值类型,每次传递都将产生一份副本 .显然这种数据结构无法满 足开发者真实需求 .go语言提供了数组切片,来弥补数组的不足 .切片并不是数组或数组指针,他通过内部指 针和相关属性引用数组片段,以实现变长方案 . slice并不是真正意义上的动态数组,而是一个引用类型.slice 总是指向一个底层array,slice的声明也可以像array一样,只是不需要长度 . ![](https://box.kancloud.cn/4c622cf2de06cecafa68f6265f67b970_714x275.png) ### 实例 [low:high:cap] 分别代表,下标起点,下标终点和容量 ~~~ func main() { a := [6]int{1, 2, 3, 4, 5, 6} s := a[0:2:4] //容量如果不写,容量-原数组的起点索引 fmt.Println(len(s)) //长度 fmt.Println(cap(s)) //容量 } ~~~ ~~~ 2 4 ~~~ ### 和数组的区别 * 数组[]里面的长度是固定的一个常量或者...,数组不能修改长度,len和cap永远都是5 * 切片[]里面为空,切片的长度或容量可以不固定 ~~~ s := []int{} fmt.Println(len(s), cap(s)) s = append(s, 10) s = append(s, 11) s = append(s, 12) fmt.Println(len(s), cap(s)) ~~~ ~~~ 0 0 3 4 //这里进行了扩容vector ~~~