📜  在 Golang 中的持续时间(1)

📅  最后修改于: 2023-12-03 15:07:39.902000             🧑  作者: Mango

在 Golang 中的持续时间

在 Golang 中,持续时间(duration)是一种表示时间间隔的数据类型。持续时间通常用于测量程序中的时间,例如事件持续时间、等待时间、超时等等。本文将介绍如何在 Golang 中使用持续时间。

1. 创建持续时间

在 Golang 中,持续时间可以通过 time 包中提供的 Duration 类型来创建。持续时间支持多种单位,例如纳秒、微秒、毫秒、秒、分钟、小时等等。

import "time"

// 创建一个持续时间为 10 秒钟
d := time.Duration(10) * time.Second

// 创建一个持续时间为 500 毫秒
d := 500 * time.Millisecond

// 创建一个持续时间为 1 分钟 + 30 秒钟
d := time.Minute + 30 * time.Second

// 创建一个持续时间为 2 小时 + 30 分钟
d := 2 * time.Hour + 30 * time.Minute
2. 操作持续时间

通过持续时间类型,可以进行一些时间运算操作,如加减、比较、取负等。

import "time"

// 持续时间加减
d := time.Duration(10) * time.Second
t := time.Now().Add(d)

// 持续时间比较
d1 := time.Duration(1) * time.Minute
d2 := time.Duration(30) * time.Second
if d1 > d2 {
    // do something
}

// 取负持续时间
d := time.Duration(10) * time.Second
nd := -d
3. 格式化持续时间

在 Golang 中,可以使用持续时间类型来格式化时间间隔字符串。

import "time"

d := time.Duration(1) * time.Hour + 30 * time.Minute + 10 * time.Second
s := d.String() // "1h30m10s"

// 使用常见时间格式化字符串来格式化持续时间
s := d.Truncate(time.Second).String() // "1h30m10s"
s := d.Round(time.Minute).String() // "1h30m"
s := d.Round(time.Second).String() // "1h30m10s"
4. 应用持续时间

在实际应用中,持续时间类型可以用于很多场景,例如设置超时、延迟执行、等待时间等等。下面列举一些常见的应用场景。

4.1 设置超时
import "time"

// 设置超时为 2 秒钟
timeout := 2 * time.Second
// 执行某个操作,如果在超时时间内没有完成,则强制退出
select {
case <-time.After(timeout):
    // timeout
case <-doSomething():
    // success
}
4.2 延迟执行
import "time"

// 延迟 1 秒钟后执行某个操作
delay := 1 * time.Second
time.AfterFunc(delay, func() {
    // do something
})
4.3 等待时间
import "time"

// 等待 2 秒钟
wait := 2 * time.Second
time.Sleep(wait)
参考资料