go - 用描述定义一组常数的最佳实践是什么

标签 go

例如,我只想用他们的名字定义一组天:

[
    {Monday=1, 'Monday'},
    {Tuesday=2, 'Tuesday'},
    {Thursday=3, 'Thursday'},
    ...
    {Sunday=4, 'Sunday'},
]
以下是我知道的方法:
  • 定义一个类型及其 desc() 函数。

  • type MyDay int
    const (
        Monday MyDay = 0
        Tuesday MyDay = 1
    )
    func (d MyDay) desc() string {
        switch(d) {
        case Monday: return "Monday";
        case Tuesday: return "Tuesday"
        }
    }
    
  • 使用整数到字符串映射

  • const (
        Monday int = 0
        Tuesday int = 1
    )
    var dayDescs []string {
        Monday: "Monday",
        Tuesday: "Tuesday",
    }
    
    两者都有不足。如果我想增加一天,我必须修改两个地方。如果我只是在一个地方添加它,它就无法工作。
    我知道另一种方法是使用标签,但反射会对效率产生副作用。
    有没有一种简单的方法来声明一个常量整数及其描述?

    最佳答案

    我认为最好的方法是实现stringer接口(interface) String() string方法。

    type MyDay int
    
    const (
        Monday MyDay = iota
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
        Sunday
    )
    
    func (d MyDay) String() string {
        return []string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}[d]
    }
    
    func main() {
        fmt.Println(Monday.String())
    }
    

    关于go - 用描述定义一组常数的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63126664/

    相关文章:

    networking - golang UDP服务器的奇怪行为

    linq - Go 泛型是否允许 LINQ to Objects 等效?

    go - 在golang中将时间戳转换为ISO格式

    go - 如何防止变量声明和发现错误

    database - 如何解决 go 编程语言中的数据库结构问题?

    http - Golang negroni 和 http.NewServeMux() 问题

    amazon-web-services - 突发数据处理的最佳 EC2 实例

    go - 在 Redigo 中将 "false"和 "true"扫描为 bool 值

    Golang os.Open 我可以将表单文件与动态文件一起使用吗

    go - 我可以在 GO 中使用 transaction.Stmt(sqlstatement).Exec(parameter) 时记录最终查询吗?