Go:数组与切片 | 青训营笔记

70 阅读2分钟

前言

数组与切片是 Go 语言中比较常见的数据结构之一,但是很多初学者往往会混淆两者之间的关系与作用。

数组

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。

数组的声明如下:

var 数组变量名 [数组长度]数组类型
// 例如 声明一个长度为 5 的整型数组
var arr [5]int

数组的赋值:

arr[0] = 0
arr[1] = 1
// 或声明加定义
arr := [5]int{1, 2, 3, 4, 5}

当数组长度不确定时可以使用 ... 语法糖来让编译器自动计算数组大小。

var arr [...]int

多维数组声明

// 二维数组
var arr2 [5][5]int
// 三维数组
var arr3 [1][2][3]int
// 更多维度
var 数组变量名 [SIZE1][SIZE2]...[SIZEN] 数组类型

注意

数组传值是引用类型。

切片

切片(Slice)是对数组的抽象,Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

切片初始化

切片初始化一共有三种方式:

// 第一种:未附加长度的数组
var slice1 []int
// 第二种 make
slice2 := make([]类型, 长度, 切片容量)
// 第三种:通过下标获取
arr := [5]int{1, 2, 3, 4, 5}
slice3 := arr[2:4]

len() & cap()

切片是可索引的,可以使用 len 函数用于获取切片长度。

cap 函数用于获取切片容量,可以测量切片最长可以达到多少。

append() & copy()

append 函数用于向切片追加元素,它可以同时追加多个元素。

slice := make([]int)
append(slice, 1, 2, 3, 4)

copy 函数用于拷贝切片。

结语

它们的共同点是都属于集合类的类型,并且,它们的值也都可以用来存储某一种类型的值(或者说元素)。

不过,它们最重要的不同是:数组的长度是固定的,而切片是可变长的

数组的长度在声明它的时候就必须给定,并且之后不会再改变。可以说,数组的长度是其类型的一部分。

参考链接:

blog.csdn.net/qq_41893274…

www.runoob.com/go/go-slice…