数组
数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型)
注意:数组在定义阶段,长度和类型就固定了,以后不能更改
数组的声明
一个数组的表示形式为[n]T。n表示数组中元素的数量,T代表每个元素的类型。元素n也是该类型的一部分。
例子:最简单的定义
package main import "fmt" func main() { var a[5]int #定义一个长度为5的int类型数组,因为没有赋值int是0 fmt.Println(a) }
#结果
[0 0 0 0 0]
定义并赋初值
package main import "fmt" func main() {
#三种定义赋值的方式,因为只赋值了4个值,所以最后一个为0 var a[5]int=[5]int{1,2,3,4} #第一种 var a=[5]int{1,2,3,4} #第二种 a:=[5]int{1,2,3,4} #第三种 a[2]=100 #索引值为2的数据修改为100 fmt.Println(a) }
#结果都是
[1 2 100 4 0]
定义时给定某位置赋值
例子:给第5个位置设置为99
package main import "fmt" func main() { a:=[10]int{1,2,4:99} #注意:go语言数组不支持负索引a[-2]这样的 fmt.Println(a) }
#结果
[1 2 0 0 99 0 0 0 0 0]
数组是值类型
Go 中的数组是值类型而不是引用类型。这意味着当数组赋值给一个新的变量时,该变量会得到一个原始数组的一个副本。如果对新变量进行更改,则不会影响原始数组。
所有的函数传参都是copy传递,在python传参不可变类型是值传参,复制值的大小,可变类型是引用传参,复制值的地址传递。
package main import "fmt" func main() { a:=[4]int{1,2,3,4} test6(a) fmt.Println(a) } func test6(b [4]int){ b[0]=100 #b的数据修改不会影响到a fmt.Println(b) }
#结果
[100 2 3 4]
[1 2 3 4]
数组的长度
使用len函数,得到数组的长度
package main import "fmt" func main() { a:=[4]int{1,2,3,4} fmt.Println(len(a)) } #结果 4
数组大小是类型一部分
var a [4]int=[4]int{1,2,} var b [5]int=[5]int{4,5,}
这两个数组类型不一样的,因为考虑到长度大小不一样
与或非(&& || !)
a:=10 if !(a>9||a<6){ }
使用range迭代数组
用for循环遍历数组中的元素
package main import "fmt" func main() { var a =[4]int{1,2,} for i:=0;i<len(a);i++{ fmt.Println(a[i]) } } #结果 1 2 0 0
Go提供了通过使用for循环的range方法来遍历数组。range返回索引和该索引处的值
注意:如果range有两个返回值接收:一个是索引值,一个是值。如果只有一个返回值接收:就只显示索引
package main import "fmt" func main() { var a =[4]int{1,2,} for i,v:=range a { #如果有两个值接收:一个是索引,一个是值。 fmt.Println("------",i) fmt.Println(v) } }
多维数组
package main import "fmt" func main() { var a [7][2]int #生成7个 a[0][1]=100 fmt.Println(a) } #结果 [[0 100] [0 0] [0 0] [0 0] [0 0] [0 0] [0 0]]