Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to get Enum name without creating String() in Golang

Tags:

enums

go

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)

like image 829
Kokizzu Avatar asked Nov 28 '14 10:11

Kokizzu


People also ask

How do I declare a string enum in Golang?

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.

Why are there no enums in Go?

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.


1 Answers

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+.

like image 118
Ainar-G Avatar answered Nov 16 '22 02:11

Ainar-G