Golang中的数据结构
切片Slice
切片可以视为对数组的抽象。Go中数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大(有点像python中的list)。
// 通过声明一个未指定大小的数组来定义切片
var identifier []type
// 使用make()函数来创建切片
var slice1 []type = make([]type, len)
slice1 := make([]type, len)
slice1 := make([]type, length, capacity)
Go中可以用append()函数来对原始的切片进行扩展,也可以使用copy()对切片进行复制。
集合Map
Map是一种无序的键值对的集合。Map 最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。 Map是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map是无序的,无法决定它的返回顺序,这是因为 Map是使用hash表来实现的。
// 声明变量,默认 map 是 nil
var map_variable map[key_data_type]value_data_type
// 使用make函数创建一个非nil的map,nil map不能赋值
map_variable := make(map[key_data_type]value_data_type)
Notice:我发现go当中的数据结构大多数需要make()来初始化一下。
range
range关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回key-value对。
nums := []int{2, 3, 4}
for i, num := range nums {
if num == 3 {
fmt.Println("index:", i)}}
Golang当中还有结构体等类C语言的结构使用,都可以从过往的知识来迁移。