golang更新切片值没有反映在容器对象中

golang更新切片值没有反映在容器对象中

php小编百草在本文中将讨论一个关于Golang中切片值更新的问题:当我们更新一个切片中的值时,为什么容器对象中的值没有得到相应的更新。这个问题在使用Golang的开发者中经常遇到,因此我们将深入探讨其中的原因,并提供解决办法。无论你是初学者还是有经验的开发者,通过阅读本文,你将能够更好地理解Golang中的切片操作。

问题内容

package mainimport (    "fmt")func main() {    root := map[string]interface{} {        "disney": "world",      }    fmt.Printf("main begin %v", root)    addList(root)    fmt.Printf("main after addList %v", root)    addMap(root)    fmt.Printf("main after addMap  %v", root)}func addList(root map[string]interface{}) {    root["list"] = make([]interface{},0,3)     mylist := root["list"]    mylist = append(mylist.([]interface{}),"mickeymouse")    fmt.Printf("addList %v", mylist)    fmt.Printf("addList %v", root)}func addMap(root map[string]interface{}) {    root["map"] = make(map[string]interface{})    mymap := root["map"]    mymap.(map[string]interface{})["donald"] = "duck"    fmt.Printf("addMap %v", mymap)    fmt.Printf("addMap %v", root)}

登录后复制

我有一个根地图,其中包含“disney”->“world”对。在该根映射中,我在函数 addlist 中添加了一个具有“mickeymouse”的切片,然后在函数 addmap 中添加了一个带有“donald”->“duck”对的映射。但是,切片不会被添加,而映射会被添加到根映射中。子映射是预期行为,但切片添加似乎是异常行为。我认为切片是一个参考,就像 golang 中的地图一样。这是怎么回事?它在 java 中应该可以工作。我哪里出错了?我怎样才能让它发挥作用?在实际的更大问题中,除了函数中的错误之外,我没有其他选择返回任何内容。

解决方法

append 函数返回一个新切片。在 map 中存储值不会生成新地图。

因此,您看不到新切片是很自然的,但您确实会看到地图的内容已更新。

我怎样才能让它发挥作用?

立即学习“go语言免费学习笔记(深入)”;

存储新切片代替旧切片,例如

mylist := root["list"]mylist = append(mylist.([]interface{}),"mickeymouse")root["list"] = mylist// or, doing it on one lineroot["list"] = append(root["list"].([]any), "mickeymouse")

登录后复制

以上就是golang更新切片值没有反映在容器对象中的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2358948.html

(0)
上一篇 2025年3月1日 17:20:03
下一篇 2025年3月1日 17:20:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论