将工作日字符串解析为 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>
基于地图的方法的优点
<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中文网其他相关文章!