Go语言学习(五) 数组

前几天一直在忙,今天才有时间继续学习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~~

原文地址:https://www.cnblogs.com/yejg1212/p/2981651.html