标签:不能 成员 初始 ice 语言 内存 代码 data 用法
简介
简单地说,切片就是一种简化版的动态数组。Go 数组的长度不可改变,而切片长度是不固定,切片的长度自然也就不能是类型的组成部分了。数组虽然有适用它们的地方,但是数组的类型和操作都不够灵活,因此在Go代码中数组使用的并不多。而切片则使用得相当广泛,理解切片的原理和用法是一个Go程序员的必备技能。
初始化
package main import "fmt" func main() { // 第一种方式 对比数组不指定size大小 var slice1 = [] int{1,2,3,4} // 第二种方式 slice2 := [] int{1,2,3,4} // 第三种方式 make生成空切片 var slice3 []int = make([]int,3,5) // 第四种方式 简写 len=3 cap=5 slice4 := make([]int,3,5) fmt.Println(slice1) fmt.Println(slice2) fmt.Println(slice3) fmt.Println(slice4) } //[1 2 3 4] //[1 2 3 4] //[0 0 0] //[0 0 0]
数据结构
我们先看看切片的结构定义,reflect.SliceHeader
:
type SliceHeader struct { Data uintptr Len int Cap int }
可以看出切片的开头部分和Go字符串是一样的,但是切片多了一个Cap
成员表示切片指向的内存空间的最大容量(对应元素的个数,而不是字节数)。下图是x := []int{2,3,5,7,11}
和y := x[1:3]
两个切片对应的内存结构。
标签:不能 成员 初始 ice 语言 内存 代码 data 用法
原文地址:https://www.cnblogs.com/lianzhilei/p/11521771.html