数组

  • 数组的长度是固定的,数组的每个元素的类型都是一样的
  • 在快捷方式:=定义一个数组时,不是所有的元素都要指定一个值:a := [3]int{12},这样默认没有值的元素就是0,也就是a为[12, 0, 0]
  • 数组的类型是 [数组长度]类型 , 这个整体才是数组的类型
  • Go里面的数组是值类型而非引用类型,这意味着,当他们被赋值给一个新变量的时候,会把原始的数组拷贝给新变量。如果对新变量做出修改,不会影响到原来的数组。
a := [...]string{"USA", "China", "India", "Germany", "France"}
b := a // a copy of a is assigned to b
b[0] = "Singapore"
fmt.Println("a is ", a) // ["USA", "China", "India", "Germany", "France"]
fmt.Println("b is ", b) // ["Singapore", "China", "India", "Germany", "France"]
  • 当把数组作为参数传递给函数时,他们实际传递的也是值,原来的数组不会受到影响。
package main

import "fmt"

func changeLocal(num [5]int) {
    num[0] = 55
    fmt.Println("inside function ", num) // [55, 6, 7, 8, 8]

}
func main() {
    num := [...]int{5, 6, 7, 8, 8}
    fmt.Println("before passing to function ", num) // [5, 6, 7, 8, 8]
    changeLocal(num) //num is passed by value
    fmt.Println("after passing to function ", num) // [5, 6, 7, 8, 8]
}
  • 多维数组
package main

import (
    "fmt"
)

func printarray(a [3][2]string) {
    for _, v1 := range a {
        for _, v2 := range v1 {
            fmt.Printf("%s ", v2)
        }
        fmt.Printf("\n")
    }
}

func main() {
    a := [3][2]string{
        {"lion", "tiger"},
        {"cat", "dog"},
        {"pigeon", "peacock"}, //this comma is necessary. The compiler will complain if you omit this comma
    }
    printarray(a)
    var b [3][2]string
    b[0][0] = "apple"
    b[0][1] = "samsung"
    b[1][0] = "microsoft"
    b[1][1] = "google"
    b[2][0] = "AT&T"
    b[2][1] = "T-Mobile"
    fmt.Printf("\n")
    printarray(b)
}