【问题标题】:Golang get value of typed constantsGolang获取类型常量的值
【发布时间】:2020-01-28 17:12:41
【问题描述】:

我正在尝试弄清楚如何在 Go 中正确使用常量,例如在其他语言中使用枚举,但我正在努力正确使用类型化常量。

假设我们有以下常量:

type Status string

const (
    Created Status = "Created"
    Completed Status = "Completed"
)

看起来您可以通过以下方式从字符串中获取Status

status := Status(s)

你怎么能走另一条路?我知道你可以实现一个String 方法,但是如果我只想要核心类型中的任何底层值,是int 还是string?互联网让我失望了......

【问题讨论】:

  • string(status)int(IntStatus) 可以。

标签: go enums constants


【解决方案1】:

正如@burak-serdar 提到的,解决方案非常简单:

string(status)

或者:

int(intStatus)

【讨论】:

    【解决方案2】:

    认为这有点混乱,但您创建的常量的基础类型是字符串,而不是整数。所以使用int(Created) 会留下cannot convert Created (type Status) to type int 错误。

    如果您在使用 Enum 并希望将字符串值与之关联 - 您应该按照您的建议使用 Stringer 接口,简单的方法如下:

    type Status int
    
    func (s Status) String() string {
        switch s {
        case 0:
            return "Created"
        case 1:
            return "Deleted"
        default:
            return ""
        }
    }
    
    const (
        Created Status = iota
        Deleted
    )
    

    然后,任何时候您需要 Status 的字符串版本,您都可以调用 string(Created) 或简单地传递它(即 fmt.Println(Created)

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 2016-09-26
      • 2016-12-05
      • 2016-09-24
      • 2016-09-26
      • 1970-01-01
      • 2014-12-20
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多