用定义常量来实现枚举类型,太简易了。没法通过值找到枚举名称,没法约束值范围,没法输出所有可选枚举值。
试过在自定义类型上面加 String(), All() 方法,但代码又多又丑陋。
有什么好的写法或者第三方包能实现吗?
     1 
                    
                    scnace      2020-09-04 10:51:00 +08:00 via Android 
                    
                    code generation (逃 
                 | 
            
     2 
                    
                    lbp0200      2020-09-04 10:54:50 +08:00    直接复制粘贴了 
                type Direction int const ( North Direction = iota East South West ) func (d Direction) String() string { return [...]string{"North", "East", "South", "West"}[d] }  | 
            
     3 
                    
                    virusdefender      2020-09-04 11:05:13 +08:00    https://github.com/abice/go-enum 这种库,来帮你生成代码 
                 | 
            
     4 
                    
                    tairan2006      2020-09-04 11:11:02 +08:00 
                    
                    是的,用代码生成器… 
                 | 
            
     5 
                    
                    woostundy   OP  | 
            
     6 
                    
                    smallthing      2020-09-04 12:13:01 +08:00 
                    
                    没觉得丑 
                 | 
            
     9 
                    
                    tikazyq      2020-09-04 13:45:19 +08:00 
                    
                    const 
                 | 
            
     10 
                    
                    reus      2020-09-04 14:03:07 +08:00    @GM 明明就是已经有工具解决了问题,而且肯定是有人需要才出现了相关工具,你这种人非要视而不见,非要在那里自己竖起靶子自己打。都不知道怎么 go 就招惹到你们这群反智东西,技术讨论不会,上来就一句“大道至简”,恶心至极。 
                 | 
            
     11 
                    
                    gowk      2020-09-04 14:33:35 +08:00 
                    
                    楼上大佬消消气,没必要,视而不见就得了。话说“大道至简”用英语怎么说来着?应该是 less is more 吧,懂的人自然懂。 
                “There are only two kinds of languages: the ones people complain about and the ones nobody uses.”  | 
            
     12 
                    
                    reus      2020-09-04 15:26:36 +08:00 
                    
                    @gowk 不能视而不见,而是应该让这些人滚开。现在所有提“大道至简”的,都是毫无营养跟风黑的傻逼。垃圾不清理,就会到处乱跑,搞坏整个环境。所以看见垃圾,就应该清理,维护良好环境。 
                 | 
            
     13 
                    
                    araraloren      2020-09-04 16:37:43 +08:00 
                    
                    @reus 然而,你说的工具也只是权宜之计,go 自身要是能很好的解决这个问题,谁还会去生成代码。。 
                 | 
            
     14 
                    
                    reus      2020-09-04 16:47:45 +08:00 
                    
                    @araraloren 你来告诉我,哪个静态语言可以通过值获得名称,而又不需要额外的代码或者宏的?哪个静态语言可以从语法层面约束值范围的?哪个语言提供了获得所有可选枚举值的语法的? 
                 | 
            
     15 
                    
                    kkkkkrua      2020-09-04 16:54:42 +08:00 
                    
                    #8 不是反串黑吗 
                 | 
            
     16 
                    
                    Itoktsnhc      2020-09-04 16:56:02 +08:00 
                    
                    其他语言反射可以嘛 
                 | 
            
     17 
                    
                    NoUltimate      2020-09-04 17:14:39 +08:00 
                    
                    proto 有 enum,不过也是代码生成 
                 | 
            
     18 
                    
                    cassyfar      2020-09-04 17:26:27 +08:00 
                    
                    我觉得 Go 写 protobuf 的 service 比较方便。所有 class 都在 protobuf 里定义,然后自动生成。protobuf 支持 enum 和各种限制。 
                我写 Go 大概一年了,以前写了 4 年 Java 。个人还是更喜欢 Java,一直不是很 get 得到 Go 的好处。主要槽点是缺乏完整 OOD 。我个人理解是 Go 是为了出活快产生的,你不必要深耕,依然写出能用的代码。但我看 Go,和看屎山差不多。  | 
            
     19 
                    
                    nannanziyu      2020-09-04 20:24:42 +08:00 
                    
                    
                 | 
            
     20 
                    
                    lrh3321      2020-09-05 07:36:40 +08:00 via Android 
                    
                    元编程 (狗头 
                 |