Go语言数据结构切片
Posted lianzhilei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言数据结构切片相关的知识,希望对你有一定的参考价值。
切片
简介
简单地说,切片就是一种简化版的动态数组。Go 数组的长度不可改变,而切片长度是不固定,切片的长度自然也就不能是类型的组成部分了。数组虽然有适用它们的地方,但是数组的类型和操作都不够灵活,因此在Go代码中数组使用的并不多。而切片则使用得相当广泛,理解切片的原理和用法是一个Go程序员的必备技能。
初始化
package main import "fmt" func main() // 第一种方式 对比数组不指定size大小 var slice1 = [] int1,2,3,4 // 第二种方式 slice2 := [] int1,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 := []int2,3,5,7,11
和y := x[1:3]
两个切片对应的内存结构。
以上是关于Go语言数据结构切片的主要内容,如果未能解决你的问题,请参考以下文章
Golang✔️走进 Go 语言✔️ 第十二课 结构体 & 切片