为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
红颜莎娜 2022-01-04 09:46:59
在下一个代码中,我试图添加一个切片的元素,但是当 Go 使用引用时,我如何通过按值使用 b 切片来使用它?package mainimport (    "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 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

无法“按值”插入切片;您需要在插入之前制作切片的副本:


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


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信