猿问

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

如果我有一个枚举:


type Day int8


const (

    Monday Day = iota

    Tuesday

    ...

    Sunday

)

有什么更自然的 Go方式来获取字符串呢?


功能:


func ToString(day Day) string {

   ...

}

或方法


func (day Day) String() string  {

    ... 

}


SMILET
浏览 131回答 3
3回答

MMMHUHU

第二个更为惯用,因为它满足Stringer接口。func (day Day) String() string  {     ...  }Day我们在非类型的类型上声明此方法,*Day因为我们没有更改值。它将使您能够写作。fmt.Println(day)并获取方法产生的值String。

翻阅古今

您自己回答这个问题的简单方法是查看 Go 标准库。包车时间import "time"类型工作日工作日指定一周中的某一天(星期日 = 0,...)。type Weekday intconst (         Sunday Weekday = iota         Monday         Tuesday         Wednesday         Thursday         Friday         Saturday )func(工作日)字符串func (d Weekday) String() stringString 返回当天的英文名称("Sunday", "Monday", ...)。src/time/time.go:// A Weekday specifies a day of the week (Sunday = 0, ...).type Weekday intconst (    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:]) + ")"}包 fmtimport "fmt"纵梁型Stringer 由具有 String 方法的任何值实现,该方法定义该值的“本机”格式。String 方法用于打印作为操作数传递给任何接受字符串的格式或未格式化打印机(如 Print)的值。type Stringer interface {         String() string         }

郎朗坤

也许我的回答可能会影响性能,但在处理大量枚举时,拥有映射将是一个糟糕的想法类型类别字符串type Category stringconst (&nbsp; &nbsp; AllStocks&nbsp; &nbsp; &nbsp; &nbsp; Category = "all"&nbsp; &nbsp; WatchList&nbsp; &nbsp; &nbsp; &nbsp; Category = "watch_list"&nbsp; &nbsp; TopGainer&nbsp; &nbsp; &nbsp; &nbsp; Category = "top_gainer_stock"&nbsp; &nbsp; TopLoser&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Category = "top_loser_stock"&nbsp; &nbsp; FiftyTwoWeekHigh Category = "high_stocks"&nbsp; &nbsp; FiftyTwoWeekLow&nbsp; Category = "low_stocks"&nbsp; &nbsp; HotStocks&nbsp; &nbsp; &nbsp; &nbsp; Category = "hot_stock"&nbsp; &nbsp; MostTraded&nbsp; &nbsp; &nbsp; &nbsp;Category = "most_active_stock")func (c Category) toString() string {&nbsp; &nbsp; return fmt.Sprintf("%s", c)}这是枚举的最简单的字符串格式化路径。
随时随地看视频慕课网APP

相关分类

Go
我要回答