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

如何使用 go 复制一个公共变量?

如何使用 go 复制一个公共变量?

Go
月关宝盒 2022-01-17 10:23:29
如何使用 go 复制一个公共变量?例如,一个名为 PublicVar 的公共变量a := []string{"A", "B"}b := afmt.Printf("%v\n", a)fmt.Printf("%v\n", b)b[0] = "C"fmt.Printf("%v\n", a)fmt.Printf("%v\n", b)// a has been changed.PublicVar 的名称将被更改,但这不是我想要的。我只想复制 PublicVar 的值。
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

发生这种情况是因为可能PublicVar是指向实例的指针。所以temp也指向同一个实例。您可以通过以下方式获取值类型。

temp := *PublicVar
temp.name = "bob"

在Playground中查看示例

编辑:由于对问题进行了编辑以显示关注的变量是一个切片,因此 khrm 的答案更相关。


查看完整回答
反对 回复 2022-01-17
?
POPMUISE

TA贡献1765条经验 获得超5个赞

按值复制。但是在地图和切片的情况下,有一个例外,即只有它们的引用被复制,因为它们被实现为引用类型。


在切片的情况下,您可以使用内置副本执行此操作:


b := make([]string, len(a))

copy(b,a)

如果是地图:


for k, v := range a {

    b[k] = v

}


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

添加回答

举报

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