Go語言的參數(shù)只能是值傳遞
值傳遞是一個(gè)拷貝的過程
Go:值傳遞
func bbb(list [4]int){ for i,_ := range list{ list[i] = 0 } } func main(){ list := [4]int{1,2,3,4} bbb(list) fmt.Println(list ) //[1 2 3 4] }
Javascript: 引用傳遞
let list = [1,2,3,4] function bbb(list){ list.forEach((item,index)=>{ list[index] = 0 }) } bbb(list) console.log(list) //[0,0,0,0]
但是Go語言可以通過指針來實(shí)現(xiàn)引用傳遞的作用
func bbb(p2 *[4]int){ //接受一個(gè)[4]int的指針 for i,_ := range p2{ p2[i] = 0 } } func main(){ list := [4]int{1,2,3,4} p := &list bbb(p) //傳遞指針 fmt.Println(list ) //[0 0 0 0] }
既然說go語言的參數(shù)傳遞只能是值傳遞,所以這里實(shí)際上是把指針地址拷貝了一份,而兩個(gè)地址都指向了main函數(shù)的變量list的地址,所以才使list的值發(fā)生了改變