Is it possible to get Enum name without creating func (TheEnum) String() string
in Golang?
const (
MERCURY = 1
VENUS = iota
EARTH
MARS
JUPITER
SATURN
URANUS
NEPTUNE
PLUTO
)
or is there a way to define constants on the fly? I found two ways struct-based and string-based, but both way make us retype each labels 1 more time (or copy-paste and quoting or using editor's macro)
String Enums in Go Go doesn't have any built-in string functionality for enums, but it's pretty easy to implement a String() method. By using a String() method instead of setting the constants themselves as string types, you can get the same benefits of an enum with the “printability” of a string.
Unfortunately, enums in Go aren't as useful due to Go's implementation. The biggest drawback is that they aren't strictly typed, thus you have to manually validate them. Having a wide range of usages, ENUMs are a powerful feature of many languages. They let you define strict values of data you expect.
AFAIK, no you can't do that without explicitly typing the name as a string. But you can use the stringer
tool from the standard tools package to do it for you:
For example, given this snippet,
package painkiller type Pill int const ( Placebo Pill = iota Aspirin Ibuprofen Paracetamol Acetaminophen = Paracetamol )
running this command
stringer -type=Pill
in the same directory will create the file pill_string.go, in package painkiller, containing a definition of
func (Pill) String() string
This is recommended to use with the go generate
command of Go 1.4+.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With