为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
SMILET 2023-04-24 16:56:44
如果我有一个枚举:type Day int8const (    Monday Day = iota    Tuesday    ...    Sunday)有什么更自然的 Go方式来获取字符串呢?功能:func ToString(day Day) string {   ...}或方法func (day Day) String() string  {    ... }
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

第二个更为惯用,因为它满足Stringer接口。

func (day Day) String() string  {
    ... 
}

Day我们在非类型的类型上声明此方法,*Day因为我们没有更改值。

它将使您能够写作。

fmt.Println(day)

并获取方法产生的值String


查看完整回答
反对 回复 2023-04-24
?
翻阅古今

TA贡献1780条经验 获得超5个赞

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


包车时间

import "time"

类型工作日

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

type Weekday intconst (
        Sunday Weekday = iota
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
)

func(工作日)字符串

func (d Weekday) String() string

String 返回当天的英文名称("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:]) + ")"

}

包 fmt

import "fmt"

纵梁型

Stringer 由具有 String 方法的任何值实现,该方法定义该值的“本机”格式。String 方法用于打印作为操作数传递给任何接受字符串的格式或未格式化打印机(如 Print)的值。

type Stringer interface {
        String() string
        }


查看完整回答
反对 回复 2023-04-24
?
郎朗坤

TA贡献1921条经验 获得超9个赞

也许我的回答可能会影响性能,但在处理大量枚举时,拥有映射将是一个糟糕的想法类型类别字符串


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)

}

这是枚举的最简单的字符串格式化路径。


查看完整回答
反对 回复 2023-04-24
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信