Go语言数组 | 青训营笔记

67 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天

一、本堂课重点内容

本堂课的知识要点有哪些?

  • Go语言数组

二、详细知识点介绍

本堂课介绍了哪些知识点?

Go语言数组

  1. 数组是一种复合数据类型,由同类型的基础数据类型组合而成,其数学含义是相同类型元素的集合。Go语言数组声明的格式如下:

    var 数组名 [数组长度]数据类型
    
  2. 数组长度为一个常量表达式,必须用方括号括起来。长度决定了编译系统给数组预分配的空间,在编译期就必须是确定的值。这就意味着不能用变量来定义数组,但可以用常量及常量表达式。

  3. 数组长度是数组的一个重要属性,一旦确定则在整个程序运行期间不可变。

  4. 数组元素的类型,可以包含任何基础数据类型,甚至还可以包括复合数据类型。不同的类型占用不同长度的内存单元,因此,声明数组的时候就要明确数据类型,便于编译系统准确预分配空间。

  5. 无论数组元素是基础数据类型还是其它复合类型,其最核心的仍然是基础数据类型。如果用户不显式给数组初始化赋值,则编译系统会自动地给所有基础数据类型的变量赋一个缺省零值。

  6. 数组元素用数组名加方括号索引的方式来访问,元素的索引值即下标从0开始,最大值为数组长度减1。第一个元素为array[0],最后一个元素为array[len(array)-1]

  7. 如果指定了数组的长度,则花括号内元素的个数不得超过数组的长度;反过来,花括号内元素的个数是可以少于数组长度的,没赋值的元素系统会自动给一个缺省零值。

  8. 数组的长度可以用系统内置函数len(array)获得。

  9. 数组初始化时如果元素数量确定,可省略数组长度,但要用三个小数点的省略号来代替

  10. 实际编程中,无论是赋值还是取值,往往是通过循环来遍历整个数组,逐个元素操作。可以用普通的for循环,也可以用带关键字range的迭代循环。

  11. Go语言规定,不同长度的数组,即使其元素类型相同,也不能看成是同类型的数组。

  12. 只有同类型的数组才可以相互整体复制,所谓同类型,是指两个数组的长度及其元素类型完全相同。我们可以为自定义的数组类型设定一个别名,例如:

    type Int3 = [3]int
    type Int6 = [6]int
    

    上述代码定义了两个整型数组类型别名:Int3Int6,这是完全不同的两种数据类型,不可以相互拷贝,但其元素可以相互赋值。

  13. 数组的别名与原数组类型共享同一个底层数据结构,各自声明的变量为同类型,可以相互复制及赋值。

  14. 按Go语言规则,数组是值类型,说明数组也是可以给其它变量赋值的,同时意味着对数组的使用是副本。

  15. 多维数组可以将元素看成是一维数组来进行降维。一个二维数组可用如下方式声明:

    var array [row][column]int
    
  16. 如果赋值字面量数量确定,则定义的时候行列数是可以省略的,但行方括号必须用省略号...代替,列方括号必须为空。例如:var array = [...][]int{{1,2,3},{4,5,6}}是合法的。

三、引用参考

我参考了哪些外部博客/笔记/文章?