什么是在Go中获取枚举字符串表示的惯用方法?

Ser*_*man 3 go

如果我有一个枚举:

type Day int8

const (
    Monday Day = iota
    Tuesday
    ...
    Sunday
)
Run Code Online (Sandbox Code Playgroud)

什么是更自然的 Go方式来获取它?

温控功能:

func ToString(day Day) string {
   ...
}
Run Code Online (Sandbox Code Playgroud)

或方法

func (day Day) String() string  {
    ... 
}
Run Code Online (Sandbox Code Playgroud)

Grz*_*Żur 9

第二个更具惯用性,因为它满足Stringer界面.

func (day Day) String() string  {
    ... 
}
Run Code Online (Sandbox Code Playgroud)

我们在Day类型not *Daytype 上声明此方法,因为我们没有更改值.

它会让你写.

fmt.Println(day)
Run Code Online (Sandbox Code Playgroud)

并获取String方法生成的值.


pet*_*rSO 7

您自己回答这个问题的简单方法是查看 Go 标准库。

\n\n
\n\n
\n

打包时间

\n\n
import "time" \n
Run Code Online (Sandbox Code Playgroud)\n\n

类型工作日

\n\n

工作日指定一周中的某一天(星期日 = 0,...)。

\n\n
type Weekday int\n\nconst (\n        Sunday Weekday = iota\n        Monday\n        Tuesday\n        Wednesday\n        Thursday\n        Friday\n        Saturday\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

func(工作日)字符串

\n\n
func (d Weekday) String() string\n
Run Code Online (Sandbox Code Playgroud)\n\n

字符串返回当天的英文名称(“Sunday”、“Monday”...)。

\n
\n\n

src/time/time.go:

\n\n
// A Weekday specifies a day of the week (Sunday = 0, ...).\n\ntype Weekday int\n\nconst (\n    Sunday Weekday = iota\n    Monday\n    Tuesday\n    Wednesday\n    Thursday\n    Friday\n    Saturday\n)\n\nvar days = [...]string{\n    "Sunday",\n    "Monday",\n    "Tuesday",\n    "Wednesday",\n    "Thursday",\n    "Friday",\n    "Saturday",\n}\n\n// String returns the English name of the day ("Sunday", "Monday", ...).\nfunc (d Weekday) String() string {\n    if Sunday <= d && d <= Saturday {\n        return days[d]\n    }\n    buf := make([]byte, 20)\n    n := fmtInt(buf, uint64(d))\n    return "%!Weekday(" + string(buf[n:]) + ")"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
\n

封装 fmt

\n\n
import "fmt" \n
Run Code Online (Sandbox Code Playgroud)\n\n

类型纵梁

\n\n

Stringer 由具有 String 方法的任何值实现,该方法定义该值的 \xe2\x80\x9cnative\xe2\x80\x9d 格式。String 方法用于将作为操作数传递的值打印到接受字符串的任何格式或打印到未格式化的打印机(例如 Print)。

\n\n
type Stringer interface {\n        String() string\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n