問題:
轉換表示一天的字串工作日價值提出了挑戰。時間包不包含任何用於此轉換的內建功能。
初始解決方案:
初始方法是利用陣列來儲存日期之間的映射週字串及其對應的 time.Weekday 值。例如:
<code class="go">var daysOfWeek = [...]string{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", } func parseWeekday(v string) (time.Weekday, error) { for i := range daysOfWeek { if daysOfWeek[i] == v { return time.Weekday(i), nil } } return time.Sunday, fmt.Errorf("invalid weekday '%s'", v) }</code>
建議最佳化:
為了提高轉換的效率和清晰度,建議使用映射而不是陣列。地圖可以實現更快的查找,從而提高效能。
<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>
提示:
為了獲得可靠的解決方案,可以使用for 循環來安全地初始化daysOfWeek map.
<code class="go">var daysOfWeek = map[string]time.Weekday{} func init() { for d := time.Sunday; d <= time.Saturday; d++ { daysOfWeek[d.String()] = d } }</code>
額外的解析彈性:
基於地圖的解比基於陣列的方法具有優勢。透過在映射中新增額外的鍵值對,可以在不修改解析邏輯的情況下解析額外的有效值。
例如,要解析工作日的完整名稱和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>
此擴展解決方案允許將“Mon”或“Fri ”等字串解析為其對應的時間。工作日值。
以上是如何將星期幾的字串表示形式轉換為「time.Weekday」值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!