首页  >  文章  >  后端开发  >  如何在 Go 中高效地将 Weekday 字符串转换为 time.Weekday?

如何在 Go 中高效地将 Weekday 字符串转换为 time.Weekday?

Linda Hamilton
Linda Hamilton原创
2024-10-31 13:10:34162浏览

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