登录
首页 >  Golang >  Go问答

关于go1.10.3中add方法与mapassign方法的联系

来源:stackoverflow

时间:2024-03-12 10:45:27 263浏览 收藏

你在学习Golang相关的知识吗?本文《关于go1.10.3中add方法与mapassign方法的联系》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在阅读go1.10.3中的地图源代码,似乎有相应的操作方法,例如:

makemap(t *maptype, hint int, h *hmap) *hmap ==> m = make(map[xx]yy)
 mapaccess1(t *maptype, h *hmap, key unsafe.pointer)==> m['key']

但我找不到添加键/值的操作的相应方法,如下所示:

m['xx']='yy'

存在一个名为mapassign的方法,它与此有一些相似之处 操作。

mapassign(t *maptype, h *hmap, key unsafe.pointer) unsafe.pointer

这将为地图添加一个新键,但正如我们所见,输入参数没有值。另一个问题是当它已经有了这个密钥时,它可能会更新这个密钥。

if !alg.equal(key, k) {
            continue
        }
        // already have a mapping for key. Update it.
        if t.needkeyupdate {//why??
            typedmemmove(t.key, k, key)
        }

既然两个key是相等的,为什么要更新呢?

摘要:

1.添加键/值操作和方法mapassign之间的关系?

2.为什么mapassign方法中插入的key和已经存在的key相等,可能需要更新key?


解决方案


  1. 在操作m[k] = v中,调用者将值v复制到mapassign返回的地址。

  2. 函数needkeyupdate中的注释解释了为什么某些类型需要关键更新:浮点和复数-0和0相等,但值不同;字符串可能有较小的后备存储。

到这里,我们也就讲完了《关于go1.10.3中add方法与mapassign方法的联系》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>