packagemainfuncmain(){ s :=[]int{1,1,1}f(s) fmt.Println(s)}funcf(s[]int){// i只是一个副本,不能改变s中元素的值/*for _, i := range s { i++ }*/for i :=range s { s[i]+=1}}
运行一下,程序输出:
果真改变了原始 slice 的底层数据。这里传递的是一个 slice 的副本,在 f 函数中,s 只是 main 函数中 s 的一个拷贝。在f 函数内部,对 s 的作用并不会改变外层 main 函数的 s。