我有一个热代码路径(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 但这太慢了。大多数语言都允许检查它们是否指向同一个对象,那么我该怎么做呢?
1 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
用 初始化地图字段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
}
}
- 1 回答
- 0 关注
- 146 浏览
添加回答
举报
0/150
提交
取消
