导读:本文介绍Go的数组类型,slice类型,map类型,以及相关的一些内置函数。
3.4.4 数组类型
1 数组的定义,赋值方式如下:
2 多维数据的定义
3.4.5 slice类型
在java中数组类型的长度一旦确定,是不可更改的,而在Go,slice是一种动态数组,长度可变。slice其实是一种引用类型,指向一个底层的array。
3.4.5.1 声明方式和array一样,但是不需要指定长度;
3.4.5.2 初始化可从已有的数组截获取,可以重新赋值;
3.4.5.3 slice有默认的起始取值位置arr[0]和默认的长度len(arr);
3.4.5.4 slice实际上有三个变量的结构体(struct),一个是指针int*,指向数组的起始位置,一个是长度len,一个是容量cap;
通过ide的调试功能,我们可以看到以下信息:
存储结构如下所示;
3.4.5.5 slice有4个内置函数,len(slice),cap(slice),append(slice,11,12,13),copy(slice,bslice),具体用户如下,make是指分配一块内存,如果只是定义个空的slice,是无法进行copy操作的,通过以下测试,我们可以知道,在进行append操作时,slice在长度不足时,会增加一倍的容量;
3.4.6 map类型
map是一种无序的键值对的集合,通过key来检索数据,声明方式:map[keyType]valueType,看上去跟数组差不多。
3.4.6.1 map是无序的,每次打印的map的都不一样;
3.4.6.2 map长度不是固定的,和slice一样,是一种引用类型;
3.4.6.3 内置函数len(map)同样适合map;
3.4.6.4 删除操作,通过delete(map,key)函数完成;
3.4.7 make、new操作
make用于内建类型map、slice 和channel(后面会详讲)的内存分配。new用于各种类型的内存分配。make返回一个有初始值(非零)的T类型,new(T)返回了一个指针,*T类型,指向新分配的类型T的零值。
Have fun!