Jim*_*imB 9
您不能直接使用该语言,但有一个生成支持代码的工具:golang.org/x/tools/cmd/stringer
stringer
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
Run Code Online (Sandbox Code Playgroud)
会产生类似的代码
const _Pill_name = "PlaceboAspirinIbuprofenParacetamol"
var _Pill_index = [...]uint8{0, 7, 14, 23, 34}
func (i Pill) String() string {
if i < 0 || i+1 >= Pill(len(_Pill_index)) {
return fmt.Sprintf("Pill(%d)", i)
}
return _Pill_name[_Pill_index[i]:_Pill_index[i+1]]
}
Run Code Online (Sandbox Code Playgroud)
- @ZephaniahGrunschlag:这就是这个例子的作用; 它生成一个简单的String方法,除了你不必自己维护它,甚至看看生成的代码.使用`stringer`包在go项目中相当常见.它并不打算创建一个真正的枚举,String()输出不用于任何比较或验证,它只是一种创建人类可读输出的方便方法.您不需要回答问题,因为您不喜欢Go社区选择的解决方案. (6认同)
- 这是非常脆弱的代码,并且不能解决 DRY 问题。如果您打算朝这个方向发展,不妨使用一个显式且简单的“String()”方法,并为每个 const 提供一个开关。 (2认同)