Go中slice作为参数传递的一些“坑”
By admin
- One minute read - 39 words看明白了这篇文章,下面的例子基本也就明白了
package main
import "fmt"
func main() {
a := []int{1,2,3}
abc(a)
fmt.Println(a)
}
func abc(a []int) {
a[0] = 2 //修改后还是原来的a
a = append(a, 4) // 此a非原a,使用append导致了重新分配内存地址(存储空间不足,系统自动分配一块新的足够大的内存地址,此时a的物理内存地址已经发行了变化,并将原来a的值copy一份到新的内存地址,所以这里修改的只是新内存地址的值,原来内存地址的值并没有改变),试着删除这行运行一次再看结果
fmt.Println(a)
a[0] = 7 // 新a,因为上面执行了append
fmt.Println(a)
fmt.Printf("\n===\n")
}
解释: [][1]