Go基础语法(1)| 青训营笔记

68 阅读3分钟

数组

数组是一个具有编号且长度固定的元素序列,是具有相同唯一类型的一组已编号且长度固定的数据项序列。这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明 number0, number1, ..., number99 的变量,使用数组形式 numbers[0], numbers[1] ..., numbers[99]  更加方便且易于扩展。

数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

image.png

声明数组

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:

var variable_name [SIZE] variable_type

以上为一维数组的定义方式。例如以下定义了数组 balance 长度为 10 类型为 float32:

var balance [10] float32

初始化数组

以下初始化数组:

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

我们也可以通过字面量在声明数组的同时快速初始化数组:

balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

如果设置了数组的长度,我们还可以通过指定下标来初始化元素:

//  将索引为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}

对于一个数组,可以很方便地取特定索引的值或者往特定索引取存储值,然后也能够直接去打印一个数组。不过,在真实业务代码里面,我们很少直接使用数组,因为它长度是固定的,一般用的更多是切片。

切片

为什么需要切片呢?我们知道数组的大小一旦确定下来就不能改变了,那么如果存放一些个数不确定的值,数组就不能使用了,这时候就需要切片,切片可以当作动态数组来使用。

切片不同于数组,可以任意更改长度,也有更多丰富的操作。比如说我们可以用make来创建一个切片,可以像数组一样去取值,使用append来追加元素。

append的用法,必须把append的结果赋值为原数组。因为slice的原理实际上是它有一个存储了一个长度和一个容量,加一个指向一个数组的指针,在执行append操作的时候 ,如果容量不够的话,会扩容并且返回新的slice。slice初始化的时候也可以指定长度,拥有像python一样的切片操作。

  • 切片的使用和数组类似,查询切片的长度、遍历切片等操作。
  • 切片是引用类型,它是数组的一个引用,在进行传递时,遵循引用传递的机制。
  • 切片是动态数组,长度是可变的。

切片的基本语法:  

var 切片名称 []类型
  如:var s1 [] int