登录
首页 >  Golang >  Go问答

Go中实现快速映射指针相等

来源:stackoverflow

时间:2024-02-24 13:45:26 210浏览 收藏

本篇文章给大家分享《Go中实现快速映射指针相等》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我有一个热代码路径(100k 运行),可以选择需要用一些值填充地图。

我正在尝试优化它,其中有帮助的事情之一就是延迟内存初始化。 我当前的代码是

mystruct struct {
   mymap
}

for i range 10000 {
    mystruct = {}
    mystruct.mymap = map[string]string
    if variable_exists {
        mystruct.mymap[variable] = blah
    }
}

随后我在大量范围语句中使用此变量,因此必须对其进行初始化。

但绝大多数时候地图只是​​空的,所以如果我不需要初始化地图只是将其留空,那就太好了。 所以我的希望是这样的

mystruct struct {
   mymap
}
default_map = make(map[string]string)

for i range 10000 {
    mystruct = {}
    mystruct.mymap = default_map
    if variable_exists {
        if mystruct.mymap == default_map {
          mystruct.mymap = make(map[string]string)
        }
        mystruct.mymap[variable] = blah
    }
}

但这不起作用。 我发现 deepequal 但那太慢了。 大多数语言都允许检查它们是否指向同一个对象,那么我该如何在 go 中做到这一点呢?


解决方案


使用 nil 初始化地图字段。在向地图添加值之前,将该字段与 nil 进行比较:

for i := 0; i < 10000; i++ {
    var m mystruct
    if variable_exists {
        if m.mymap == nil {
            m.mymap = make(map[string]string)
        }
        m.mymap[variable] = blah
    }
}

终于介绍完啦!小伙伴们,这篇关于《Go中实现快速映射指针相等》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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