【发布时间】:2017-11-27 02:17:10
【问题描述】:
我想获得一个指向映射值(包含结构)的指针,这样我就可以修改结构中的一个字段,而不必重新分配它。
type Foo struct {
Bar int64
}
func SomeFunction(arg * Foo) {
...
}
我目前要做的事情:
if val, ok := myMap[idx]; ok {
// val is of type `Foo`
SomeFunction(&val)
myMap[idx] = val
}
我想做的事:
if val, ok := getPointer(myMap, idx); ok {
// val is of type `* Foo`
SomeFunction(val)
}
有没有办法做到这一点,还是我需要依靠编译器足够聪明才能在这里执行复制省略?
【问题讨论】:
-
您要解决什么原始问题?这个复制操作是瓶颈吗?您是否针对此代码分析并检查了 go 程序集?
-
不可抗拒。地图值不可寻址。
-
解决问题的方法可能是使用
map[keyType]*Foo。
标签: go