How to make Go print enum fields as string?
I am going to expand on the accepted answer a little with this method:
type MyEnum int
const (
Foo MyEnum = iota
Bar
)
func (me MyEnum) String() string {
return [...]string{"Foo", "Bar"}[me]
}
// ...
fmt.Println(Foo, Bar) // Prints: Foo Bar
The above code assumes that the enum values starts from 0, which works out nicely because the first element in the array in the method String can be referenced by the enum value directly.
But the first enum value in the original question has a value of 1. We can modify it the method accordingly.
const (
Foo MyEnum = iota + 1
Bar
)
func (me MyEnum) String() string {
return [...]string{"", "Foo", "Bar"}[me]
}
Here's the playlink: https://play.golang.org/p/6pmyVlsAeV2
You need to make the field exported
,ie you may declare the struct as
type MyStruct struct {
Field MyEnum
}
Here is a sample program with exported
and unexported
fields
Code
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 {
Field1 MyEnum
field2 MyEnum
}
func main() {
info := &MyStruct{
Field1: MyEnum(1),
field2: MyEnum(2),
}
fmt.Printf("%v\n", MyEnum(1))
fmt.Printf("%v\n", info)
fmt.Printf("%+v\n", info)
fmt.Printf("%#v\n", info)
}
Output
Foo
&{Foo 2}
&{Field1:Foo field2:2}
&main.MyStruct{Field1:1, field2:2}
Here is play link : https://play.golang.org/p/7knxM4KbLh