程序中一大堆 enum 类型,这些 enum 类型会参与 Json 的编解码、日志打印等等。
想到最起码的方式,必须为这个 enum 类型提供一堆在值和 string 的映射关系,比如使用[]string 或者 map[int]string 。这个肯定是每个 enum 少不了的代码。假设就是 String()吧。
但是对于 Unmarshal 、String 、Marshal 、Sacn 等接口,每个类型都得写一个么?在面向对象里面,只要基类实现了这几个接口,其他的 enum 都基于这个基类来实现就好了。
Golang 中如何避免大量的代码拷贝粘贴呢?
1
aapeli 251 天前 1
|
2
tairan2006 251 天前 via Android
最简单的办法是用 protobuf 生成
|
3
lasuar 251 天前 1
自己写个代码生成器,又不难
|
4
zhwguest OP @aapeli 感谢哈,我是说如果我有一堆,如何降低重复代码,这个提供 int <-> string 之间映射的函数肯定是要定制的。我的意思是从这个关系上扩展的一堆函数能不能不用每种 enum 都要写一份。
|
5
bazingaterry 251 天前
走 code gen 吧
|
7
timnottom 251 天前
自己多写几个 code gen , 能极大提高开发效率
|
8
aapeli 251 天前
看起来如 #7 #3 讲的,code generate 吧, 读 ast 去 generate code
|
10
fenglangjuxu 250 天前
```
for key, value := range inputData { switch value.(type) { case string: outputData[key] = value.(string) case int: tmp := value.(int) outputData[key] = Int2Str(tmp) case int64: tmp := value.(int64) outputData[key] = Int642Str(tmp) } } ``` 类似这样,写一个函数 在 case 里面吧所有的 enum 都写上,然后做些处理 |