传递切片时,为什么 Go 中的函数 append 与引用一起工作?

在下一个代码中,我试图添加一个切片的元素,但是当 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]]。


红颜莎娜
浏览 125回答 1
1回答

弑天下

无法“按值”插入切片;您需要在插入之前制作切片的副本:package mainimport (    "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go