Go入门(6)——数组
数组:具有相同唯一类型的一组被编号且长度固定的数据项序列。类型可以是任意的原始类型,如整型、字符串或者自定义类型。数组长度必须是常量表达式,并且必须是非负整数。
声明格式:
var identifier [len]type
如:
var arr_name [9]int
注意事项
如果需要让数组元素类型为任意类型,可以使用空接口作为类型,使用其值前必须做类型判断。
数组索引从0开始;数组长度最大为2Gb。
遍历
由于存在索引,方便了for
结构:
package main
import "fmt"
func main(){
var arr1 [5]int
for i:=0; i < len(arr1); i++{
arr1[i] = 2 * i
}
for i:=0; i < len(arr1); i++{
fmt.Printf("Array at index %d is %d\n", i, arr1[i])
}
}
输出结果为:
Array at index 0 is 0
Array at index 1 is 2
Array at index 2 is 4
Array at index 3 is 6
Array at index 4 is 8
此外还有for-range
结构:
for i, _ := range arr1{
// ...
}
多维数组
Go的多维数组是矩形式的。
package main
const (
WIDTH = 1920
HEIGHT = 1080
)
type pixel int
var screen [WIDTH][HEIGHT]pixel
func main(){
for y:=0; y < HEIGHT; y++{
for x:=0; x < WIDTH; x++{
screen[x][y] = 0
}
}
}
将数组传递给函数
将大型数组传递给函数非常消耗内存。以下两种方法可以避免这种问题:
- 传递数组的指针;
- 使用数组的切片。
package main
import "fmt"
func main(){
// 传指针
array := [3]float64{7.0, 8.5, 9.2}
x := Sum(&array)
fmt.Printf("The sum of the array is: %f", x)
}
func Sum(a *[3]float64)(sum float64){
for _, v := range a{
sum += v
}
return
}