2022年8月更文挑战10-golang复合数据类型

56 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

golang复合数据类型

前文

前文曾讨论过golang的基础类型,本文从个人的角度对golang的复合数据类型进行总结。内容主要为个人的理解,依然存在不足之处。

数组

数组的长度是固定的,需要在声明数组阶段直接进行数组长度的指定。如果想获取数组中的元素或更新数组中的元素,直接通过数组的下角标进行操作。而获取数组元素个数则采用len函数进行获取。

下面看一下数组初始化的几种方式:

    var a [3]int  //直接初始化为默认值
    var q [3]int = [3]int{1, 2, 3} //直接初始化为实际值
    q := [...]int{1, 2, 3} //省略数组长度,自动进行长度计算

slice切片

切片相对数组来说,是一个可变长度的数据结构,结构中每个元素也是同样的数据类型。slice的底层是数组,一个数组可以共享出多个切片,而这些切片采用相同的底层数组,当数组变化或切片变化时,其他的切片和数组本身也会收到影响。切片的元素个数用len获取,而切片的容量cap则表示由第一个元素到数组末尾元素的总个数。

使用append可以对切片进行元素的新增。当切片空间不足时,会进行翻倍处理并进行内存的重新分配,采用其他的内存空间。而当切片空间足够时,同样会对底层数组进行修改。

而当slice采用make进行初始化时,则没有对应的底层数组,会重新分配空间作为底层数组。

map

map是无序的key、value结构,通过key值进行查找。所有的key必须采用相同的类型,所有的value也是相同的类型。初始化时采用make操作或直接进行元素指定:

    ages := make(map[string]int) 
    
    ages := map[string]int{
        "a":   31,
        "b": 34,
    } //直接指定元素值

map[string]int{} //创建空的map

而操作元素时直接通过key访问元素即可:

    ages["a"] = 32
    delete(ages,"b")

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。