如何在GO语言中访问map的值?

5
我该如何访问以下代码的地图值?代码片段是自动生成的,所以我无法修改它。我尝试过 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,
}

错误: 无法将int(api.OpType_UNKNOWN)(类型为int)用作map索引中的int32类型

1个回答

7

Go语言对类型要求非常严格。你的map中所有的键都是int32类型,但你却试图使用OpType类型的值来访问它们。即使OpType也是int32类型也无济于事。

你可以将OpType强制转换为int32类型以使其正常工作。

func main() {
  fmt.Println(OpType_name[int32(OpType_UNKNOWN)])
}

@nos的评论是一个不错的方案,这很可能是你在这种情况下想要的。

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


4
或者,可以使用OpType而不是int32来制作地图,map[OpType]string{ - nos
1
我认为值得挑剔一下:OpType 不是 int32:它只与 int32 的类型内部表示共享值。关键点在于 type B A 并不会使 B “继承” A 的任何方法。这对于没有方法的 int32 并不重要,但在处理自定义类型时很重要。 - kostix
1
我的意思是,这就是为什么Go允许从int32OpType的类型转换(内部表示相同),但不允许将OpType类型的值分配给int32类型的接收器的原因:如果允许这样做,接收器可能想调用其类型定义的方法,但传递给它的值在其(不同的)类型中没有该方法。 - kostix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接