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

Go不支持运算符重载,但如何解释时间包,go,operator-overloading,Go,Operator Overloading,我做围棋已经有一段时间了,我刚刚注意到这行代码:- today:=time.Now().Weekday() 转换时间,星期六{ 今日案例+0: fmt.Println(“今天”) 今日案例+1: fmt.Println(“明天”) 今日案例+2: fmt.Println(“两天内”) 违约: fmt.Println(“太远了”) } 如果Go不支持运算符重载,如何使用“+”运算符来增加日期?time.Now().Weekday()返回类型为time.Weekday的值,该值是inttoday+

我做围棋已经有一段时间了,我刚刚注意到这行代码:-

today:=time.Now().Weekday()
转换时间,星期六{
今日案例+0:
fmt.Println(“今天”)
今日案例+1:
fmt.Println(“明天”)
今日案例+2:
fmt.Println(“两天内”)
违约:
fmt.Println(“太远了”)
}
如果Go不支持运算符重载,如何使用“+”运算符来增加日期?

time.Now().Weekday()
返回类型为
time.Weekday
的值,该值是
int
today+1
有效,因为1是一个非类型常量,其类型根据上下文确定。在这种情况下,今天的
1
都属于
time.Weekday类型

还要注意的是,由于它的定义方式,时间。星期六是6,
所以
time.Saturday==今天+2
有效,但
time.Saturday+2
不会匹配任何有效的工作日。

我不确定您的问题,但我想您可以关注
time
套餐。它很强大

围棋中有许多时间类型,例如
时间.工作日
时间.持续时间
,以及
时间.月
。它们支持
+
运算符,因为它们的基本类型是数字,但不支持
time.time
。它的基本类型是结构。我们可以使用
time.time
的方法进行操作,如
time.add
time.sub
time.adddate
time.after
time.before
time.equa
您可以使用
time.unix
time.unixnano
来获取数字类型的时间戳进行操作

作为一个例子,我实现了两种方法来计算从某个时间到下周的时间以及与当前时间的偏差

导入(
“时间”
)
func nextweekDayer(现在是time.time,工作日time.weekday)time.time{
立即返回.AddDate(0,0,NextWeekdayNum(现在,工作日))
}
func NextWeekdayNum(现在是time.time,工作日time.weekday)int{
差异:=(工作日-现在。工作日())+7
如果差异>=7{
差值-=7
}
返回整数(差分)
}

你看了什么,一周中的每一天都是什么?但是(time.Saturday)%7会。谢谢你,这就解释了一切,我应该知道底层的原语类型是int。