前几天一直在忙,今天才有时间继续学习Go语言。
我也不知道会坚持多久,会学到什么地步,不过我会坚持,尽可能地坚持学下去...
回到正题,数组是Go语言中的一个重要的类型,由[n]<type> 定义,n 标示array 的长度,而<type> 标示希望存储的内容的类型。
申明一个数组:
var arr1 [10]int
Go语言中的数组一般有固定的大小,大小是类型的一部分。由于不同的大小是不同的类型,因此不能改变大小。
数组同样是值类型的:将一个数组赋值给另一个数组,会复制所有的元素。
尤其是当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。
代码为证:
1 package main 2 3 import "fmt" 4 5 func modify(array [5]int) { 6 array[0] = 10 7 fmt.Println("In modify(), array values:", array) //[10 2 3 4 5] 8 } 9 10 func main() { 11 array := [5]int{1, 2, 3, 4, 5} 12 modify(array) 13 fmt.Println("In main(), array values:", array) //[1 2 3 4 5] 14 }
输出结果为:
In modify(), array values: [10 2 3 4 5]
In main(), array values: [1 2 3 4 5]
正好印证了上面说的:当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。
关于数组的申明方式已经二维数组的使用见如下实例:
package main import "fmt" func main() { //申明一个长度为10的int数组 var arr1 [10]int arr1[0] = 42 arr1[1] = 13 fmt.Printf("The element is %d\n", arr1[0]) //42 fmt.Printf("The element is %d\n", arr1[9]) //默认值0来初始化 fmt.Println(arr1) //申明一个长度为3,值分别为1,2,3的数组 arr2 := [3]int{1, 2, 3} fmt.Println(arr2) //如下情况,Go会自动统计元素个数 arr3 := [...]int{1, 2, 3} fmt.Println(arr3) //二维数组,如下3中方式都可以 //a := [2][2]int{ [2]int{1,2}, [2]int{3,4} } //a := [2][2]int{ [...]int{1,2}, [...]int{3,4} } a := [2][2]int{{1, 2}, {3, 4}} fmt.Println(a) fmt.Printf("%d\n", a[0][0]) //1 fmt.Printf("%d\n", a[0][1]) //2 fmt.Printf("%d\n", a[1][0]) //3 fmt.Printf("%d\n", a[1][1]) //4 }
数组就到这里了,明天继续slices~~