在go語言中的切片變量其實就是一個地址,咱們先來看一段代碼:數據結構
func test_arr() { a := []int{1, 2, 3} var c [][]int b := a c = append(c, b) c = append(c, b) fmt.Println(c) c[0][0] = 9 fmt.Println(c) fmt.Println(a) change(a) fmt.Println(c) fmt.Println(b) } func change(cp []int) { cp[0] = 6 }
輸出結果以下:app
咱們不難發現,在上面代碼中,並不須要傳遞切片a的地址,就能夠修改a中的值。在這種狀況下,若是要拷貝一個新的切片對象的話,就須要使用go語言官方提供的一個內置函數copy(copy_slice,src_slice)。函數
使用示例:對象
func test_arr() { a := []int{1, 2, 3} var c [][]int b := make([]int, len(a)) //使用copy函數必須複製切片的結構必須和源數據結構一致 copy(b, a) c = append(c, b) c = append(c, b) fmt.Println(c) c[0][0] = 9 fmt.Println(c) fmt.Println(a) change(a) fmt.Println(c) fmt.Println(b) } func change(cp []int) { cp[0] = 6 }
執行結果:blog