如何在GO中访问地图值?

cod*_*efx 4 go

如何访问以下代码的映射值?代码段是自动生成的,因此我无法对其进行修改.我试过OpType_name[OpType_UNKNOWN]但是我从golang编译器得到错误.

type OpType int32

const (
    OpType_UNKNOWN OpType = 0
    OpType_CREATE OpType = 1
    OpType_DELETE OpType = 3
)

var OpType_name = map[int32]string{
    0: "UNKNOWN",
    1: "CREATE",
    2: "DELETE",
}
var OpType_value = map[string]int32{
    "UNKNOWN": 0,
    "CREATE": 1,
    "DELETE": 2,
}
Run Code Online (Sandbox Code Playgroud)

错误: cannot use int(api.OpType_UNKNOWN) (type int) as type int32 in map index

And*_*and 6

Go对类型非常严格.你的地图都有typ int32的键,你试图使用OpType类型的值访问它们.OpType是int32并不重要.

您可以将OpType转换为int32并使其工作

func main() {
  fmt.Println(OpType_name[int32(OpType_UNKNOWN)])
}
Run Code Online (Sandbox Code Playgroud)

来自@nos的评论是一个很好的方法,它可能就是你想要的.

https://play.golang.org/p/dum5GiB3zS

  • 或者,使地图使用OpType而不是int32,`map [OpType] string {` (4认同)