Golang 枚举可以像 Java 的枚举一样做同样的行为吗?



Java的枚举具有有用的方法'valueOf(string)' what返回const enum member。前任。

enum ROLE {
  FIRST("First role"),
  SECOND("Second role")
  private final String label;
  private ROLE(label String) {
    this.label = label;
  }
  public String getLabel() {
    return label;
  }
}
// in other place of code we can do:
ROLE.valueOf("FIRST").getLabel(); // get's "First role"

例如,此行为对于 html 表单的选择提交到服务器后非常有用。我们有字符串表示需要转换为真正的枚举。

有人能说,戈朗能做同样的行为吗?欢迎使用代码示例。

No. Go 没有枚举。

因此,您需要使用单独的地图:

const (
    First = iota
    Second
)
var byname = map[string]int {
    "First": First,
    "Second": Second,
}

如果需要大量此类常量,请考虑使用代码生成。

但实际上我没有看到你想要的功能的真正版本:常量几乎是自我描述的,因为在源代码中它们的名字已经是文本。 因此,"在运行时获取与文本字符串关联的数字"的唯一明智用例是解析一些数据/输入,而使用查找映射就是这种情况——一旦你像我一样重新表述问题,这一点就很明显了。

最新更新