如何在 Go 中获取指向映射中值的指针

dla*_*lle 5 go

我想获得一个指向映射值(其中包含结构)的指针,以便我可以修改结构中的字段,而无需重新分配它。

type Foo struct {
    Bar int64
}

func SomeFunction(arg * Foo) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我目前要做的事情:

if val, ok := myMap[idx]; ok {
  // val is of type `Foo`
  SomeFunction(&val)
  myMap[idx] = val
}
Run Code Online (Sandbox Code Playgroud)

我想做的事:

if val, ok := getPointer(myMap, idx); ok {
  // val is of type `* Foo`
  SomeFunction(val)
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点Go,或者我需要依赖编译器足够聪明来执行复制省略?

Eug*_*sky 6

对于此操作,您可以使用map指针。喜欢:

var myMap map[int]*Foo

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