您打印一个使用“%v”实现 Stringer 的枚举,它将打印其字符串值。如果您在结构中声明相同的枚举并使用“%v”打印该结构,它将打印枚举的数值。有没有办法打印枚举字段的字符串值?
示例( https://play.golang.org/p/AP_tzzAZMI ):
package main
import (
"fmt"
)
type MyEnum int
const (
Foo MyEnum = 1
Bar MyEnum = 2
)
func (e MyEnum) String() string {
switch e {
case Foo:
return "Foo"
case Bar:
return "Bar"
default:
return fmt.Sprintf("%d", int(e))
}
}
type MyStruct struct {
field MyEnum
}
func main() {
info := &MyStruct{
field: MyEnum(1),
}
fmt.Printf("%v\n", MyEnum(1))
fmt.Printf("%v\n", info)
fmt.Printf("%+v\n", info)
fmt.Printf("%#v\n", info)
}
印刷:
Foo
&{1}
&{field:1}
&main.MyStruct{field:1}
原文由 Igor Gatis 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要制作字段
exported
,即您可以将结构声明为这是一个带有
exported
和unexported
字段的示例程序代码
输出
这是播放链接:https: //play.golang.org/p/7knxM4KbLh