go语言 – 数组是值类型

Go中的数组是值类型,而不是引用类型。这意味着当它们被赋值给一个新变量时,会创建一个原始数组的副本赋值给新变量。

如果对新变量进行更改,不会影响原始数组。

package main

import "fmt"

func main() {  
    a := [...]string{"USA", "China", "India", "Germany", "France"}
    b := a // a的一个副本被分配给b
    b[0] = "Singapore"
    fmt.Println("a is ", a)
    fmt.Println("b is ", b) 
}

在上面的程序中,数组a的一个副本被分配给b。然后,b的第一个元素改为Singapore。这不会影响原始数组a

程序将输出:

a is [USA China India Germany France]  
b is [Singapore China India Germany France] 

类似地,当数组作为参数传递给函数时,它们按值传递,而原始数组不变。

package main

import "fmt"

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

}
func main() {  
    num := [...]int{5, 6, 7, 8, 8}
    fmt.Println("before passing to function ", num)
    changeLocal(num) //num是通过值传递的
    fmt.Println("after passing to function ", num)
}

数组num是通过值传递给函数changeLocal的,因此不会因为函数调用而更改原来的数组值。

这个程序将输出,

before passing to function  [5 6 7 8 8]  
inside function  [55 6 7 8 8]  
after passing to function  [5 6 7 8 8] 


浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载