数组
数组是具有相同类型且长度固定的一组数据项序列,这组数据项序列对应存放在内存中的一块连续区域中。
数组中存放的元素类型可以是整型、字符串或其他自定义类型。数组在使用前需先声明,声明时必须指定数组的大小且数组大小之后不可再变。
数组元素可以通过数组下标来读取或修改,数组下标从0开始,第一个元素的数组下标为0,第二个元素的数组下标为1,以此类推。
声明格式
数组声明格式如下:
var 数组变量名 [数组长度]元素类型
例如,声明数组str,长度为3,元素类型为string:
var str [3]string
package main
import "fmt"
func main(){
var str []string
fmt.Println(str) //打印数组
}
执行结果:
[ ]
由于以上代码仅声明了数组,没有对数组进行赋值,因此打印出来的数组为空数组。
初始化数组
数组可在声明时进行赋值,样例如下:
var str = [3]string{"Tom","Ben","Peter"}
使用这种方式初始化数组,需要保证大括号里面的元素数量和数组大小一致。初始化数组中 {} 中的元素个数不能大于[] 中的数字。
如果忽略中括号内的数字,不设置数组大小,Go语言编译器在编译时也可根据元素的个数来设置数组的大小,通过用“...”代替数组大小来实现。样例如下:
var str = [...]string{"Tom","Ben","Peter"}
package main
import "fmt"
func main(){
var str = [...]string{"Tom","Ben","Peter"}
fmt.Println(str) //打印数组
}
执行结果:
[Tom Ben Peter]
range关键字
range是Go语言中非常常用的一个关键字,其主要作用就是配合for关键字对数组以及之后会介绍到的切片和映射等数据结构进行迭代。
package main
import "fmt"
func main(){
var num = [...]int{1,2,3,4}
for index,value := range num {
fmt.Println("index:",index,"-","value:",value)
}
}
执行结果:
index: 0 - value: 1
index: 1 - value: 2
index: 2 - value: 3
index: 3 - value: 4
range后接的表达式称为range表达式,本例的range表达式为数组。在迭代时,关键字range会返回两个值,分别由变量index和value接收。其中index是当前循环迭代到的索引位置,value是该位置对应元素值的一份副本。
其他range表达式及其对应的返回值如表
| range表达式 | 第一返回值 | 第二返回值 |
|---|---|---|
| 数组 | 元素下标 | 元素值 |
| 切片 | 元素下标 | 元素值 |
| 映射 | 键 | 值 |
| 通道 | 元素 | N/A |
遍历数组
数组元素可以通过数组下标来读取或修改,数组下标从0开始,第一个元素的数组下标为0,第二个元素的数组下标为1,以此类推。
我们现在可以通过遍历数组的方式(for循环)来对其进行打印
package main
import "fmt"
func main(){
var str = [...]string{"Tom","Ben","Peter"}
for index,value := range str {
fmt.Println("index:",index,"-","value:",value)
}
}
执行结果:
index: 0 - value: Tom
index: 1 - value: Ben
index: 2 - value: Peter
或者这样
package main
import "fmt"
func main(){
var str = [...]string{"Tom","Ben","Peter"}
for index = 0; index < 3; index++ {
fmt.Println("index:",index,"-","value:",str[index])
}
}
执行结果:
index: 0 - value: Tom
index: 1 - value: Ben
index: 2 - value: Peter
从打印结果可以看到,Go语言可以通过循环十分方便地获取数组的下标和对应元素。