**数组(Array)**
数组是一个具有`相同数据类型`的元素组成的`固定长度`的`有序集合`。比如下面的例子
var x [5]int
表示数组x是一个整型数组,而且数值的长度为5。`Go提供了几种不同的数组定义方法。`
`最基本的方式就是使用var关键字来定义,然后依次给元素赋值`。`对于没有赋值的元素,默认为零值`。比如对于整数,零值就是0,浮点数,零值就是0.0,字符串,零值就是"",对象零值就是nil。
1 package main 2 3 import ( 4 "fmt" 5 ) 7 func main() { 8 var x [5]int 9 x[0] = 210 x[1] = 311 x[2] = 312 x[3] = 213 x[4] = 1214 var sum int15 for _, elem := range x {16 sum += elem17 }18 fmt.Println(sum)19 }
在上面的例子中,我们首先使用`var`关键字来声明,然后给出数组名称`x`,最后说明数组为整型数组,长度为5。然后我们使用索引方式给数组元素赋值。在上面的例子中,我们还使用了一种遍历数组元素的方法。该方法利用Go语言提供的内置函数range来遍历数组元素。`range函数可以用在数组,切片和字典上面`。当`range来遍历数组的时候返回数组的索引和元素值`。在这里我们是对数组元素求和,所以我们对索引不感兴趣。在Go语言里面,`当你对一个函数返回值不感兴趣的话,可以使用下划线(_)来替代它`。另外这里如果我们真的定义了一个索引,在循环结构里面却没有使用索引,Go语言编译的时候还是会报错的。所以用下划线来替代索引变量也是唯一之举了。最后我们输出数组元素的和。
还有一种方式,如果知道了数组的初始值。可以像下面这样定义。
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 var x = [5]int{1, 2, 3, 4} 9 x[4] = 510 11 var sum int12 for _, i := range x {13 sum += i14 }15 fmt.Println(sum)16 }
当然,即使你不知道数组元素的初始值,也可以使用这样的定义方式。
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 var x = [5]int{} 9 x[0] = 110 x[1] = 211 x[2] = 312 x[3] = 413 x[4] = 514 15 var sum int16 for _, i := range x {17 sum += i18 }19 fmt.Println(sum)20 }
在这里我们需要特别重视数组的一个特点,就是数组是有固定长度的。`
但是如果我们有的时候也可以不显式指定数组的长度,而是使用`...`来替代数组长度,Go语言会自动计算出数组的长度。不过这种方式定义的数组一定是有初始化的值的。
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 var x = [...]string{ 9 "Monday",10 "Tuesday",11 "Wednesday",12 "Thursday",13 "Friday",14 "Saturday",15 "Sunday"}16 17 for _, day := range x {18 fmt.Println(day)19 }20 }
在上面的例子中,还需要注意一点就是如果将数组元素定义在不同行上面,那么最后一个元素后面必须跟上`}`或者`,`。上面的例子也可以是这样的。
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 var x = [...]string{ 9 "Monday",10 "Tuesday",11 "Wednesday",12 "Thursday",13 "Friday",14 "Saturday",15 "Sunday",16 }17 18 for _, day := range x {19 fmt.Println(day)20 }21 }
Go提供的这种可以自动计算数组长度的方法在调试程序的时候特别方便,假设我们注释掉上面数组x的最后一个元素,我们甚至不需要去修改数组的长度。