Go 如何打印“的字符串表示形式”;“枚举”;在围棋中?
我查看了各种官方来源,了解如何做到这一点,但我找不到。假设您有以下枚举(我知道golang没有经典意义上的枚举): 使用上面的Go 如何打印“的字符串表示形式”;“枚举”;在围棋中?,go,enums,printf,Go,Enums,Printf,我查看了各种官方来源,了解如何做到这一点,但我找不到。假设您有以下枚举(我知道golang没有经典意义上的枚举): 使用上面的%s可以得到的最接近的值,它给出了: Log Level: %!s(main.LogLevel=1) 我希望: Log Level: Debug 有人能帮我吗?您不能直接使用该语言,但有一个生成支持代码的工具: 从stringer文档中的示例 type Pill int const ( Placebo Pill = iota Aspirin
%s
可以得到的最接近的值,它给出了:
Log Level: %!s(main.LogLevel=1)
我希望:
Log Level: Debug
有人能帮我吗?您不能直接使用该语言,但有一个生成支持代码的工具: 从
stringer
文档中的示例
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
将生成类似于
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]]
}
const\u Pill\u name=“placeboaspirinibuprofenpacetamol”
var_Pill_index=[…]uint8{0,7,14,23,34}
func(i)String()字符串{
如果i<0 | | i+1>=丸(len(_丸_指数)){
返回fmt.Sprintf(“药丸(%d)”,i)
}
return\u Pill\u name[\u Pill\u index[i]:\u Pill\u index[i+1]]
}
这对我很有用:
级别\u str=fmt.SPrintf(“%s”,级别)
此代码的可能副本非常脆弱,无法解决干燥问题。如果你想朝这个方向走,最好有一个显式的、简单的String()
方法,每个常量都有一个开关。@ZephaniahGrunschlag:这就是这个例子的作用;它生成一个简单的字符串方法,除非您不必自己维护它,甚至不必查看生成的代码。使用stringer
包在go项目中相当常见。它并不打算创建一个真正的枚举,String()输出并不用于任何比较或验证,它只是一种创建人类可读输出的方便方法。你不需要否决一个答案,因为你不喜欢围棋社区选择的解决方案。
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]]
}