'What is idiomatic way to get string representation of enum in Go?
If I have an enum:
type Day int8
const (
Monday Day = iota
Tuesday
...
Sunday
)
What is more natural Go way to get string of it?
fucntion:
func ToString(day Day) string {
...
}
or method
func (day Day) String() string {
...
}
Solution 1:[1]
The easy way for you to answer this question yourself is to look at the Go standard library.
import "time"A Weekday specifies a day of the week (Sunday = 0, ...).
type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday )func (Weekday) String
func (d Weekday) String() stringString returns the English name of the day ("Sunday", "Monday", ...).
src/time/time.go:
// A Weekday specifies a day of the week (Sunday = 0, ...).
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
var days = [...]string{
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
}
// String returns the English name of the day ("Sunday", "Monday", ...).
func (d Weekday) String() string {
if Sunday <= d && d <= Saturday {
return days[d]
}
buf := make([]byte, 20)
n := fmtInt(buf, uint64(d))
return "%!Weekday(" + string(buf[n:]) + ")"
}
import "fmt"Stringer is implemented by any value that has a String method, which defines the “native” format for that value. The String method is used to print values passed as an operand to any format that accepts a string or to an unformatted printer such as Print.
type Stringer interface { String() string }
Solution 2:[2]
Maybe my answer might have performance hit but when working with a huge set of enums, having a mapping would be a terrible ideatype Category string
type Category string
const (
AllStocks Category = "all"
WatchList Category = "watch_list"
TopGainer Category = "top_gainer_stock"
TopLoser Category = "top_loser_stock"
FiftyTwoWeekHigh Category = "high_stocks"
FiftyTwoWeekLow Category = "low_stocks"
HotStocks Category = "hot_stock"
MostTraded Category = "most_active_stock"
)
func (c Category) toString() string {
return fmt.Sprintf("%s", c)
}
This is the easiest string formatting route for enums.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | mourya venkat |
