【发布时间】:2017-02-02 19:58:27
【问题描述】:
我开始学习其他语言之后的 Go。 Go 有一个非常 elegant way of creating constants 的数值,例如:
const (
_ = iota // 0 and is skipped
Sunday // 1
Monday // 2
...
)
这很容易写,但真的容易维护吗?例如,如果您突然在当前之间插入新值,则所有后续都将更改它们的值。而且很难找到,只有仔细阅读差异才能揭示它。或者其他部分的错误。如何使用名称提取这些值并在程序的其他部分或数据库中使用? 例如对于 PostgreSQL,我可以定义:
CREATE TYPE color AS ENUM ('', 'Sunday', 'Monday');
只是为了说明一个想法。例如Python has Enum 输入:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
那么你可以像Color.RED一样使用它。接下来我可以取所有值:
list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]
这让我可以“自省”到模块并在数据库中创建易于阅读的枚举。例如对于 PostgreSQL,我可以定义:
CREATE TYPE color AS ENUM ('RED', 'GREEN', 'BLUE');
我该怎么做:
- 反映 golang 常量名称?
- 制作不会漂移其值的防错常量?只能手动修复吗?
- 可能有更好的惯用方法吗?
谢谢。
【问题讨论】:
-
该值是否改变应该无关紧要,因为您应该仅按名称使用常量。这是像这样声明常量而不是使用文字值的主要原因。
-
是的,虽然所有值都在一个程序中,但它们并不重要。但我想在其他人中使用它们,所以我必须翻译一些数值。一旦我使用了它们,我就无法更改它们。或者尽量避免完全数字并只坚持字符串?谢谢
标签: python postgresql go enums idioms