今天继续跟着“码术”一起学习Golang语言。之前的章节我们学习了Golang的基本数据类型。接下来我们要学习Golang内置的高级类型:数组、切片和字典。首先先讲解数组。
数组(array)
Go语言的数组是一个定长的序列,数组包含的元素的类型相同。多维数组可以简单的使用自身为数组的元素来创建。
数组的元素使用操作符[]来索引,索引号从0开始。因此数组第一个元素为:array[0],最后一个元素为array[len(array)-1]。数组是可以更改的,可以使用array[index]放在赋值操作符左侧完成设置index位置的元素内容。
数组使用以下语法创建:
-------------------------------------------
[length]type;
[N]type(value1,value2,...,valueN)
[...]type(value1,value2,...,valueN)
-------------------------------------------
第一种情况中,没有为数组的元素进行赋值,此时每个元素采用默认值:零值。
第二种情况中,申明了长度为N的数组,并依次给元素赋值。
第三种情况中的符号...(省略号)操作符,Go语言会自动为计算数组长度。
注意:
对于整数,零值=0;对于浮点数,零值=0.0,对于字符串,零值="",对于对象,零值=nil。
例如:
var x [5]int
var y = [5]int{0, 1, 2, 3, 4}
var city = [...]string{"beijing", "shanghai", "guangzhou", "nanjing"}
x[0] = 10
x[1] = 20
x[4] = 40
fmt.Printf("%-8T %v\n", x, x)
fmt.Printf("%-8T %v\n", y, y)
fmt.Printf("The length of city %d \n", len(city))
输出结果为:
[5]int [10 20 0 0 40]
[5]int [0 1 2 3 4]
The length of city 4
例子中显示:如果在创建数组的时候,没有显式地初始化或者部分初始化,Go语言会对没有赋值的项初始化为相应类型的零值。
使用...符号能自动计算数组长度。Go提供这种自动计算数组长度的方法在调试程序的时候能提供一定便利性。因为如果我们移除数组的某一项或几项时候无需修改数组的长度。
多维数组
var grid1 [3][3]int
grid1[1][0], grid1[1][1], grid1[1][2] = 8, 4, 2
grid2 := [3][3]int{{4, 8}, {3, 6, 9}}
fmt.Printf("%-8T %v\n", grid1, grid1)
fmt.Printf("%-8T %v\n", grid2, grid2)
输出:
[3][3]int [[0 0 0] [8 4 2] [0 0 0]]
[3][3]int [[4 8 0] [3 6 9] [0 0 0]]
不同与C和C++,Go语言中的数组是按值传递的,因此传递一个大数组的代价非常大。幸运的是,在Go语言中数组不经常用到,因为我们可以使用切片(slice)来代替。下次我们将讲解切片的用法。
---------------------------------------------
欢迎关注码术!一起学习Golang语言。