登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-10 19:33:37 260浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《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 不支持运算符重载,我如何使用“+”运算符来增加日期?


解决方案


time.now().weekday() 返回 time.weekday 类型的值,这是一个 inttoday+1 可以工作,因为 1 是一个无类型常量,它的类型是根据上下文确定的。在此上下文中,today1 都是 time.weekday 类型。

另请注意,由于其定义方式,time.saturday 为 6, 所以 time.saturday == today+2 有效,但是 time.saturday+2 不会匹配任何有效的工作日。

我不确定你的问题,但我认为你可以注意time 包。很强大。

go中的时间类型有很多种,比如time.weekdaytime.durationtime.month。它们支持 + 运算符,因为它们的基础类型是数字,但不支持 time.time。它的底层类型是结构。我们可以使用time.time的方法进行操作,如time.addtime.subtime.adddatetime.aftertime.beforetime.equa 您可以使用 time.unixtime.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)
}

今天关于《Go不支持运算符重载,但是如何解释时间包》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>