一、duration的基本概念
duration是Go語言中表示時間段的類型,它是int64類型的別名。在Go語言中,時間處理是比較重要的,因為很多情況下我們都需要和時間打交道。duration類型可以表示一段時間,比如1小時30分鐘,可以用time.Hour*1+time.Minute*30來表示。duration類型的單位是納秒,可以使用time包中的常量來表示不同的時間段。
// 常用的時間段
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
二、duration的使用方法
duration類型可以通過代表整數的字元串進行解析,例如”2h30m”的字元串表示2小時30分的時間段,可以使用ParseDuration方法將其解析成duration類型
package main
import (
"fmt"
"time"
)
func main() {
duration, err := time.ParseDuration("2h30m")
fmt.Println(duration, err)
}
輸出:
2h30m0s <nil>
duration類型可以進行加減操作,在時間處理中非常常見,例如我們可以用Add或者Sub方法對時間進行操作:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
expiration := now.Add(time.Hour * 24)
fmt.Println(expiration.Sub(now))
}
輸出:
24h0m0s
三、duration的單位轉換
duration類型可以轉換為其他時間單位,例如分鐘、小時等。可以使用duration類型的Seconds方法獲得秒數,然後再根據自己的需要轉換為其他時間單位。例如:
package main
import (
"fmt"
"time"
)
func main() {
duration := time.Hour + time.Minute*30
fmt.Println(int(duration.Seconds() / 60)) // 轉換為分鐘
fmt.Println(duration.Hours()) // 轉換為小時
}
輸出:
90
1.5
四、duration與ticker定時器的使用
duration類型可以與ticker定時器一起使用,可以在指定的時間內執行某些操作,例如定時執行某個任務。例如:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(2 * time.Second)
go func() {
for t := range ticker.C{
fmt.Println("Tick at ", t)
}
}()
time.Sleep(10 * time.Second)
ticker.Stop()
fmt.Println("Ticker stopped")
}
輸出:
Tick at 2021-06-17 21:58:51.9558865 +0800 CST m=+2.002681801
Tick at 2021-06-17 21:58:53.9559934 +0800 CST m=+4.002748701
Tick at 2021-06-17 21:58:55.9561261 +0800 CST m=+6.002861401
Tick at 2021-06-17 21:58:57.9562236 +0800 CST m=+8.003938001
Tick at 2021-06-17 21:58:59.9563296 +0800 CST m=+10.004023801
Ticker stopped
五、duration與sleep的使用
duration類型可以與sleep一起使用,可以讓程序在指定的時間內睡眠。sleep的時間應該使用duration類型表示。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Sleep 5 seconds")
time.Sleep(5 * time.Second)
fmt.Println("Wake up")
}
輸出:
Sleep 5 seconds
Wake up
六、duration的注意事項
在使用duration類型時需要注意以下幾點:
- duration類型只能有一個正負號,即不能存在兩個連續的負號。
- duration類型的最大取值不能超過1<<63-1,如果超過會產生溢出。
- duration類型的精度不能保證完全正確,因此在計算時間時可能會有誤差。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256797.html