数组
` 数组单独写一个,因为数组是go语言编程中最常用的数据结构之一,是一类数据的集合,数组包含元素个数被称为数组长度
常规数组声明
[32]byte //长度为32的数组,每个元素为一个字节
[2 * n] struct (x,y int32) //复杂类型数组
[1000]*float64 //指针数组
[3][5]int //二维数组
[2][2][2]float64 //等同于[2]([2]([2]float64))
数组可以是多维的,这与其它语言类似,go语言数组定义长度后不可改变,声明长度时,可以使用常量,也可以使用常量表达式,数组长度是数组类型内置常量,用len(s)获取
元素获取
与其它语言相同使用下标取元素
遍历方法有两种
一种是
for i := 0; i < len(array); i++ {
fmt.Println("Element", i, "of array is", array[i])
}
另一种是go语言提供的关键字range于是上面的便利过程可以这样写
for i, v := range array {
fmt.Println("Array element[", i, "]=", v)
}
range有两个返回值,第一个是元素的数组下标,第二个是元素的值
值类型
go语言中,数组是一个值类型(value type).所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作.如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。
package main
import "fmt"
func modify(array [10]int) {
array[0] = 10 // 试图修改数组的第一个元素
fmt.Println("In modify(), array values:", array)
}
func main() {
array := [5]int{1,2,3,4,5} // 定义并初始化一个数组
modify(array) // 传递给一个函数,并试图在函数体内修改这个数组内容
fmt.Println("In main(), array values:", array)
}
该程序的执行结果为:
In modify(), array values: [10 2 3 4 5]
In main(), array values: [1 2 3 4 5]
所以说modify中数组与main中传入的数组是两个不同实例