【发布时间】:2020-09-19 07:08:17
【问题描述】:
几十年来我一直在使用 C,我养成了使用枚举的零值作为特殊的未定义/未知/错误值的习惯。多年来,我相信这为我节省的调试时间不是数小时甚至数天,而是数月,因为它使值未初始化时很明显。 (对于存在合理默认值且不可能存在未初始化值的简单枚举,我不会这样做。)
在我看来,这种做法在 Go 中更有用,因为值会自动为您初始化为零。但是,有人告诉我“惯用的”Go 零值应该是有效值。我认为这个“规则”是为结构发明的,在没有构造函数的情况下,有一个新创建的“归零”结构可供使用是很有意义的,但有些情况下没有逻辑默认值(对于结构和枚举)。
如果你需要,这里是一个例子:
type Base int
const (
Invalid Base = iota
A
C
T
G
)
请注意,我已经在 SO 上广泛搜索了这个问题,并且对这个特定主题没有被涵盖感到惊讶。我意识到我的问题有些主观,可能会被标记,但我认为它很有用。我正在寻找证据表明使用零值来指示错误条件是可接受的 Go 实践。这种用法的任何例子,例如。来自标准 Go 库,将不胜感激。
【问题讨论】:
-
用零值表示无效一点也不稀奇:golang.org/search?q=unknowngolang.org/search?q=invalid