Go语言程序设计:集合类型
Go 集合
本章主要介绍了以下类型:
值,指针以及引用的类型。除此之外,还包括了Go语言的一些内置类型:数组、切片和映射。
通常情况下,变量持有相应的值。值在传递给函数或者方法时会被复制一次,这对布尔类型或者数值类型来说非常廉价。按值传递字符串也很廉价,因为字符串不可变。但是,如果修改一个传入的字符串的话,代价可能会很大。
在Go语言中,数组是按值传递的。幸运的是,我们不常用数组,而是用切片。
对于指针来说,用法跟C是类似的。既有&取地址操作符,也有*解引用操作符。其基本的用法与C指针类似。在生成一个结构体的实例时,我们可以用new(Type)来生成这个实例的指针,或者用&type{}的方法来生成指针。其中后者还可以进行初始化。
除了这两者之外,还有引用类型。引用类型的传递也很廉价,语法跟值一样。
映射和切片都是引用,因此,我们对其的任何修改都是可见的。
除了映射和切片之外,通道、函数和方法都是引用类型。引用没有什么特殊的语法,它跟值的使用是一样的。
数组和切片
Go语言的数组是定长的,且类型相同。创建的语法如下:
[length]type
[N]type{value1, ...., valueN}
[...]type{value1, ...,valueN}
三种情况中,有一点很重要:数组的长度是确定的,需要在[]中确定下来。要么你一开始确定,要么根据数组内容可以推断出来。数组的长度可以用len函数来获取。
一般来说,我们可以用数组来获取切片。创建切片的话,通过以下方式:
make([]type, length, capacity)
make([]type, length)
[]type{}
[]type{value1,..., valueN}
在[]不需要确定长度,切片的长度是可变的。内置函数make可以用来创建切片,映射和通道。也就是说,make可以用来创建引用类型中的大部分。如果不用make,用{}就可以了。
索引、分割切片:与python是一样的。
遍历切片:
分为for i := range slice 以及 for _, value := range slice
第一个值都是索引。
修改切片:可以使用append函数来添加新的切片,copy可以用来复制。
排序和搜索切片:多个函数
映射
Go语言中的映射类似于python中的dict,用来保存键值对。
映射的创建方式跟切片类似,也是可以通过make来创建:
make(map[keytype]valuetype, initialcap)
make(map[keytype]valuetype)
map[keytype]valuetype{}
map[keytype]valuetype{key1:value1, key2:value2}
:要么通过make来创建,要么通过{}
其他的使用方法跟python类似。
有疑问加站长微信联系(非本文作者)