首頁 >後端開發 >Golang >如何在 Go 中高效地將 Weekday 字串轉換為 time.Weekday?

如何在 Go 中高效地將 Weekday 字串轉換為 time.Weekday?

Linda Hamilton
Linda Hamilton原創
2024-10-31 13:10:34251瀏覽

How Do I Convert Weekday Strings to time.Weekday in Go Efficiently?

將工作日字串解析為time.Weekday:使用Map 的慣用方法

將工作日字串轉換為對應的time .Weekday 值Go 需要自訂解決方案,因為沒有用於此轉換的內建功能。雖然所提出的基於數組的函數提供了可行的解決方案,但基於地圖的方法在效率和靈活性方面具有優勢。

使用地圖的增強解決方案

而不是使用一個數組,利用以工作日字符串作為鍵及其相應時間的映射。工作日值作為值可顯著加快查找速度並簡化代碼:

<code class="go">var daysOfWeek = map[string]time.Weekday{
    "Sunday":    time.Sunday,
    "Monday":    time.Monday,
    "Tuesday":   time.Tuesday,
    "Wednesday": time.Wednesday,
    "Thursday":  time.Thursday,
    "Friday":    time.Friday,
    "Saturday":  time.Saturday,
}

func parseWeekday(v string) (time.Weekday, error) {
    if d, ok := daysOfWeek[v]; ok {
        return d, nil
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}</code>

基於地圖的方法的優點

  • 更快的查找:映射提供O(1) 查找時間,使其比迭代數組更有效率。
  • 直接初始化: 初始化映射更容易,尤其是使用for 迴圈完成時,如本例所示:
<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        daysOfWeek[d.String()] = d
    }
}</code>

擴充映射以獲取其他輸入

這種基於地圖的方法還允許靈活添加可解析為time.Weekday 的新有效值。例如,簡短的3 個字母的工作日名稱可以包含在一個簡單的循環中:

<code class="go">var daysOfWeek = map[string]time.Weekday{}

func init() {
    for d := time.Sunday; d <= time.Saturday; d++ {
        name := d.String()
        daysOfWeek[name] = d
        daysOfWeek[name[:3]] = d
    }
}</code>

此擴充功能允許解析完整的工作日名稱(例如“Monday”)和短的工作日名稱(例如“Mon”) ") 轉換為time.Weekday。

在此上下文中使用映射提供了一種更快、更方便且可擴展的方式來將工作日字串解析為Go 中的time.Weekday 值。

以上是如何在 Go 中高效地將 Weekday 字串轉換為 time.Weekday?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn