【问题标题】:How get a pointer to a value in a map in Go如何在Go中获取指向地图中值的指针
【发布时间】: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


【解决方案1】:

对于这个操作,你可以使用map if 指针。喜欢:

var myMap = map[int]*Foo

if _, val := range myMap {
  // val is of type `* Foo`
  SomeFunction(val)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多