亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go不支持運算符重載,但是如何解釋時間包

Go不支持運算符重載,但是如何解釋時間包

Go
Smart貓小萌 2023-08-14 14:56:05
我已經進行 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 不支持運算符重載,我如何使用“+”運算符來增加日期?
查看完整描述

2 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

time.Now().Weekday()返回類型為 的值time.Weekday,該值是inttoday+1有效,因為 1 是一個無類型常量,并且它的類型是根據上下文確定的。在這種情況下, 和today都是1類型time.Weekday。

另請注意,由于其定義方式,time.Saturday 為 6,因此time.Saturday == today+2可以工作,但time.Saturday+2不會匹配任何有效的工作日。


查看完整回答
反對 回復 2023-08-14
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

我不確定你的問題,但我想你可以注意一下包裹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)

}


查看完整回答
反對 回復 2023-08-14
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號