第四章 go语言 数组、切片和映射 (6)

Go语言中,数组作为函数的参数仍然是值传递,虽然可以使用数组的指针来代替,但是改变不了数组长度。这时,我们通常使用切片slice来替代数组。

 

6 数组比较

如果数组元素的类型是可比较的,那么这个数组也是可的比较。只有数组的所有元素都相等数组才是相等的。由于长度也是数组类型的一部分,所以长度不同的数组是不等的。

数组可遍历、可修改,是否可比较,由数组元素决定。%T用于显示一个值对应的数据类型。

 

4.2 数组切片(slice

数组的长度在定义之后无法修改。数组是值类型,每次传递都将产生一份副本。显然这无法满足开发者的某些需求。Go语言提供了数组切片(slice)来弥补数组的不足。数组和slice之间有着紧密的联系,一个slice是一个轻量级的数据结构,提供了访问数组子序列元素的功能,而且slice的底层确实引用一个数组对象。

1 声明数组切片(slice

    数组切片与数组声明非常相似,唯一区别是无需指定长度。

var 数组切片 []类型

var slice []int

 

2 基于数组以及基于切片创建切片

arr := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} //数组

slice1 := arr[0:5]     //基于数组切片1,左闭右开

slice2 := slice1[1:3]  //基于切片1创建切片2

fmt.Println(slice1)    //[1 2 3 4 5]

fmt.Println(slice2)    //[2 3]

 

3 直接创建切片

Go语言提供的内置函数make()可以用于灵活的创建数组切片。make()函数创建一个指定元素类型、长度和容量的slice。容量部分可以省略,在这种情况下,容量将等于长度。在底层,make创建了一个匿名的数组变量,然后返回一个slice。只有通过返回的slice才能引用匿名的数组变量。

make([]T,len)

make([]T,len,cap)

 

内置的len()函数获取长度,内置的cap()函数获取容量。

slice1 := make([]int, 5)

slice2 := make([]int, 5, 10)

slice3 := []int{1, 2, 3, 4, 5}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxdzw.html