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,11y := x[1:3]两个切片对应的内存结构。

 

以上是关于Go语言数据结构切片的主要内容,如果未能解决你的问题,请参考以下文章

Go语言 | 03 数组指针切片用法

Go语言 | 03 数组指针切片用法

Go 语言的切片使用

Golang✔️走进 Go 语言✔️ 第十二课 结构体 & 切片

Golang✔️走进 Go 语言✔️ 第十二课 结构体 & 切片

go语言学习笔记 — 基础 — 高级数据类型 — 数据容器 — 切片:切片内部结构