Go语言的参数只能是值传递
值传递是一个拷贝的过程
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语言可以通过指针来实现引用传递的作用
func bbb(p2 *[4]int){ //接受一个[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语言的参数传递只能是值传递,所以这里实际上是把指针地址拷贝了一份,而两个地址都指向了main函数的变量list的地址,所以才使list的值发生了改变
有疑问加站长微信联系(非本文作者)