Go中的快速映射指针相等

我有一个热代码路径(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 但这太慢了。大多数语言都允许检查它们是否指向同一个对象,那么我该怎么做呢?


子衿沉夜
浏览 147回答 1
1回答

阿波罗的战车

用 初始化地图字段nil。将字段与nil向地图添加值之前进行比较:for i := 0; i < 10000; i++ {&nbsp; &nbsp; var m mystruct&nbsp; &nbsp; if variable_exists {&nbsp; &nbsp; &nbsp; &nbsp; if m.mymap == nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m.mymap = make(map[string]string)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; m.mymap[variable] = blah&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go