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 {
...
}
The second one is more idiomatic because it satisfies Stringer interface.
func (day Day) String() string {
...
}
We declare this method on the Day
type not *Day
type because we are not changing the value.
It will enable you to write.
fmt.Println(day)
and get the value produced by String
method.
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() string
String 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 }