为什么在传递切片时,Go中的函数会附加参考?

时间:2016-04-06 15:15:27

标签: go

在下一个代码中,我尝试添加切片切片的元素,但是当Go使用参考时,如何通过使用b切片值来使用它?

package main

import (
    "fmt"
)

func main() {
    a := []int{1}
    arr := [][]int{a}

    b := []int{2}

    arr = append(arr, b)
    fmt.Println(arr)

    b[0] = 3
    arr = append(arr, b)   

    fmt.Println(arr)
}

我预计最后一个Println是[[1] [2] [3]],但它[[1] [3] [3]]。

1 个答案:

答案 0 :(得分:3)

无法通过值"插入切片&#34 ;;你需要在插入之前制作切片的copy

package main

import (
    "fmt"
)

func copy_ints(c []int) []int {
    s := make([]int, len(c))
    copy(s, c)
    return s
}

func main() {
    a := []int{1}
    arr := [][]int{copy_ints(a)}

    b := []int{2}

    arr = append(arr, copy_ints(b))
    fmt.Println(arr)

    b[0] = 3
    arr = append(arr, copy_ints(b))

    fmt.Println(arr)
}

https://play.golang.org/p/Tds5FGj3nf