gpt4 book ai didi

python - 在 Go 中枚举常量的最佳方法

转载 作者:IT王子 更新时间:2023-10-29 01:26:38 24 4
gpt4 key购买 nike

我开始学习其他语言后的 Go。 Go 有一个非常 elegant way of creating constants数值如下:

const (
_ = iota // 0 and is skipped
Sunday // 1
Monday // 2
...
)

这个写起来很容易,但是真的容易维护吗?例如,如果你突然在 between present 中插入新的值,所有后续的值都会改变。而且很难找到,只有仔细阅读差异才能揭示它。或者其他部分的错误。我怎样才能用名称提取这些值并在程序的其他部分或数据库中使用?例如对于 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');

我怎样才能:

  1. 反射(reflect) golang 常量名称?
  2. 制作不会改变其值的防错常量?只能手动修复它们?
  3. 是否有一种惯用的方法可以做得更好?

谢谢。

最佳答案

1) 您可以使用 stringer 生成名称 https://godoc.org/golang.org/x/tools/cmd/stringer

2) 不确定你的意思?大多数语言都允许你漂移值,如果你希望数字保持不变,你应该总是添加到列表的末尾,或者像在 python 中一样,你可以明确地将每个值设置为一个数字而不是使用 iota。

3) 不是真的,枚举在 golang 中不是很好

关于python - 在 Go 中枚举常量的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42011235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com