Dictionary Go中的快速映射指针相等
我有一个热代码路径100k次运行,可以选择使用一些值填充映射 我正在尝试优化它,其中一个可以帮助的方法是延迟内存初始化。 我现在的代码是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 } }
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不是预期最终结果的上下文中使用的代码。