数组
- 数组的长度是固定的,数组的每个元素的类型都是一样的
- 在快捷方式:=定义一个数组时,不是所有的元素都要指定一个值: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)
}