Golang enum能像Java的枚举一样做同样的行为吗?

时间:2016-02-25 14:54:01

标签: java go enums

Java的枚举有一个有用的方法'valueOf(string)'返回const枚举成员的名称。 实施例

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表单的select提交到服务器之后很有用。我们有字符串表示需要转换为真正的枚举。

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

1 个答案:

答案 0 :(得分:3)

没有。而Go没有枚举。

所以你需要使用一个单独的地图:

const (
    First = iota
    Second
)

var byname = map[string]int {
    "First": First,
    "Second": Second,
}

如果您需要有很多这样的常量,请考虑使用code generation

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