Dictionary Go中的快速映射指针相等

Dictionary Go中的快速映射指针相等,dictionary,go,Dictionary,Go,我有一个热代码路径100k次运行,可以选择使用一些值填充映射 我正在尝试优化它,其中一个可以帮助的方法是延迟内存初始化。 我现在的代码是 mystruct struct { mymap } for i range 10000 { mystruct = {} mystruct.mymap = map[string]string if variable_exists { mystruct.mymap[variable] = blah } }

我有一个热代码路径100k次运行,可以选择使用一些值填充映射

我正在尝试优化它,其中一个可以帮助的方法是延迟内存初始化。 我现在的代码是

mystruct struct {
   mymap
}

for i range 10000 {
    mystruct = {}
    mystruct.mymap = map[string]string
    if variable_exists {
        mystruct.mymap[variable] = blah
    }
}
随后,我在大量range语句中使用了这个变量,因此必须对其进行初始化

但绝大多数情况下,地图都是空的,所以如果我不需要初始化地图就让它空的话,那就太好了。 所以我的希望是

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
    }
}

当在范围语句中使用nil时,它不会被吓坏吗?这是其他人可能在nil不是预期最终结果的上下文中使用的代码。