package main
import (
"fmt"
)
type A int
func main() {
var a A = 12
fmt.Printf("%p", &a) //0xc0000120b8
fun1(&a) // 9
fmt.Printf("%d", a) //0xc0000120b8
fun2(a) // 9
fmt.Printf("%d", a) //0xc0000120b8
}
func fun1(a *A) {
fmt.Println(a) //0xc0000120b8
*a = 9
}
func fun2(a A) {
fmt.Println(&a) // 0xc0000120f0
a = 10
}
總結
go中默認按值傳遞傳遞參數,在fun2函數中修改變量a不會影響原來的變量a,而通過指針傳遞可以修改原來的變量。fun2的a拷貝了main中a變量,值相同地址不同,所以在這裏的a和main方法裏面的a內存地址不一樣。