
前言:
我在中发布了此实用程序
github.com/icza/gox,请参见
timex.ParseWeekday()。
是的,使用映射而不是数组,因此查找更快,更简单:
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)}测试它:
fmt.Println(parseWeekday("Monday"))fmt.Println(parseWeekday("Friday"))fmt.Println(parseWeekday("invalid"))输出(在Go Playgorund上尝试):
Monday <nil>Friday <nil>Sunday invalid weekday 'invalid'
小费:
您甚至可以使用
for循环来安全地初始化
daysOfWeek地图,如下所示:
var daysOfWeek = map[string]time.Weekday{}func init() { for d := time.Sunday; d <= time.Saturday; d++ { daysOfWeek[d.String()] = d }}测试和输出是相同的。在Go Playground上尝试一下。
该map-solution的另一个不错的属性(与array-
solution相比)是您可以在同一map中列出可以被解析为其他有效值的其他有效值,而
time.Weekday无需其他解析代码。
例如,我们也分析了3个字母的短星期名到其
time.Weekday等同,比如
"Mon"到
time.Monday。
可以通过一个简单的循环添加此扩展名:
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 }}测试它:
fmt.Println(parseWeekday("Monday"))fmt.Println(parseWeekday("Friday"))fmt.Println(parseWeekday("Mon"))fmt.Println(parseWeekday("Fri"))fmt.Println(parseWeekday("invalid"))输出(在Go Playground上尝试):
Monday <nil>Friday <nil>Monday <nil>Friday <nil>Sunday invalid weekday 'invalid'
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)