java - Golang enum 可以像 Java 的 enum 一样做同样的行为吗?

标签 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 表单的选择提交到服务器之后。我们有需要转换成真实枚举的字符串表示。

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

最佳答案

没有。 Go 没有枚举。

因此您需要使用单独的 map :

const (
    First = iota
    Second
)

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

如果您需要大量此类常量,请考虑使用 code generation .

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

关于java - Golang enum 可以像 Java 的 enum 一样做同样的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35630698/

相关文章:

go - Beego 和 Https

go - 如何在 Go 中获取结构的方法列表?

python - PyQt6中QStyle.StandardPixmap是如何定义的

java - 使用外部 JAR 构建 Eclipse 项目

Java 8 可选流 get() - 在方法内部还是外部?

google-chrome - GoDoc 标识符搜索浏览器界面

java - java - 如何通过覆盖方法来使用java枚举中的字段?

java - 如何将 3 个单独的程序放入 JTabbedPane 中。它们已经为 JFrame 编写

java - 在 Java 中绘制带轮廓的字符串有什么更好的方法吗?

c# - 通用方法,取消装箱可为 null 的枚举