切片类型和map类型学习|青训营笔记

174 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

1.切片类型

切片类型是一个引用类型,切片的结构体由3部分构成,1.指向一个数组的指针pointer,2.当前切片的长度len,3.当前切片的容量cap,cap总是大于或等于len。

ee1fc6f8c2d19b1f0e1738851e08b4f.png 切片有点像c语言里的指针。指针可以做运算,但代价是内存操作越界。切片在指针的基础上增加了大小,约束了切片对应的内存区域。在切片使用过程中,无法对切片内部的地址和大小进行手动调整,因此切片比指针更安全、强大。

直接申明新的切片

切片类型的申明格式如下: var name []Type

2d017244b7d446cf5e84c72f0b3687d.png 在申明了新的切片后,可以使用append()函数向切片中添加元素。如果需要创建一个指定长度的切片,则可以使用make()函数,格式如下: make([]Type,size,cap),其中Type是切片的元素类型,size是指为这个类型分配多少个元素,cap是指预分配的元素数量(设定这个值并不影响size,只是能提前分配空间,可以降低多次分配空间造成的性能问题)。 如:slice2 := make([]int,6,10)

map类型

map是一种元素对的无序集合,包括一个key和一个value,map是引用类型,可以使用如下方式申明:

var name map[key_type]value_type

在申明时不需要知道map的长度,因为map是可以动态增长的。未初始化的map的值时nil。使用函数len()可以获取map中元素对的数目

b72919760398f2b7156e6722e6a0ceb.png

也可以预先申明map的初始容量,当map增长到容量上限时,如果再增加新的元素对,map的大小会自动加1 map := make(map[string]float32,100)

用切片作为map的值

map1 := make(map[int] []int)

map2 := make(map[int] *[]int)