猿问

Go不支持运算符重载,但是如何解释时间包

我已经进行 Go 之旅有一段时间了,我刚刚注意到这行代码:-


today := time.Now().Weekday()

    switch time.Saturday {

    case today + 0:

        fmt.Println("Today.")

    case today + 1:

        fmt.Println("Tomorrow.")

    case today + 2:

        fmt.Println("In two days.")

    default:

        fmt.Println("Too far away.")

    }

如果 Go 不支持运算符重载,我如何使用“+”运算符来增加日期?


Smart猫小萌
浏览 115回答 2
2回答

偶然的你

time.Now().Weekday()返回类型为 的值time.Weekday,该值是int. today+1有效,因为 1 是一个无类型常量,并且它的类型是根据上下文确定的。在这种情况下, 和today都是1类型time.Weekday。另请注意,由于其定义方式,time.Saturday 为 6,因此time.Saturday == today+2可以工作,但time.Saturday+2不会匹配任何有效的工作日。

吃鸡游戏

我不确定你的问题,但我想你可以注意一下包裹time。它很强大。Go中有多种时间类型,如time.weekday、 、time.duration、 等time.month。它们支持+运算符,因为它们的基础类型是数字,但time.Time不受支持。它的底层类型是结构。我们可以使用 for 运算的方法time.Time,如Time.add, Time.sub, Time.adddate, Time.after, Time.before,Time.equa可以使用Time.unixorTime.unixnano来获取数值类型的时间戳进行运算。作为例子,我实现了两种方法来计算从某个时间到下一周的时间以及与当前时间的偏差。import (    "time")func NextWeekdayTime(now time.Time, weekday time.Weekday) time.Time {    return now.AddDate(0, 0, NextWeekdayNum(now, weekday))}func NextWeekdayNum(now time.Time, weekday time.Weekday) int {    diff := (weekday - now.Weekday()) + 7    if diff >= 7 {        diff -= 7    }    return int(diff)}
随时随地看视频慕课网APP

相关分类

Go
我要回答