Std time
Stop Reset
好的,让我们详细解释一下 Ticker 的 Reset 和 Stop 方法。
func (t *Ticker) Reset(d Duration)
Reset 方法用于重置 Ticker 的时间间隔。如果 Ticker 已经在运行,它会停止当前的计时并立即开始新的计时周期。
使用场景:
- 当你需要动态调整
Ticker的时间间隔时,可以使用Reset方法。 - 例如,在某些情况下,你可能希望根据某些条件来调整定时器的间隔时间。
示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个每秒触发一次的 Ticker
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
// 启动一个 goroutine 来处理 Ticker
go func() {
for range ticker.C {
fmt.Println("Ticker ticked")
}
}()
// 等待 3 秒
time.Sleep(3 * time.Second)
// 重置 Ticker 为每 2 秒触发一次
ticker.Reset(2 * time.Second)
fmt.Println("Ticker reset to 2 seconds")
// 再等待 6 秒
time.Sleep(6 * time.Second)
}
在这个示例中,Ticker 最初每秒触发一次。在 3 秒后,我们使用 Reset 方法将 Ticker 重置为每 2 秒触发一次。
func (t *Ticker) Stop()
Stop 方法用于停止 Ticker。一旦调用 Stop,Ticker 将不再向其通道发送任何值,并且必须确保不再使用该 Ticker。
使用场景:
- 当你不再需要定时器时,应该调用
Stop方法来释放相关资源。 - 例如,在某个条件满足时,你希望停止定时器。
示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个每秒触发一次的 Ticker
ticker := time.NewTicker(1 * time.Second)
// 启动一个 goroutine 来处理 Ticker
go func() {
for range ticker.C {
fmt.Println("Ticker ticked")
}
}()
// 等待 3 秒
time.Sleep(3 * time.Second)
// 停止 Ticker
ticker.Stop()
fmt.Println("Ticker stopped")
// 再等待 3 秒以确保没有更多输出
time.Sleep(3 * time.Second)
}
在这个示例中,Ticker 每秒触发一次。在 3 秒后,我们调用 Stop 方法停止 Ticker,之后 Ticker 将不再触发。
总结
Reset(d Duration):重置Ticker的时间间隔。如果Ticker已经在运行,它会停止当前的计时并立即开始新的计时周期。Stop():停止Ticker,使其不再向通道发送任何值,并释放相关资源。
通过这两个方法,我们可以更灵活地控制 Ticker 的行为。
当然,以下是带有注释的 time 包常用 API 分组:
时间点相关操作
-
获取当前时间
time.Now():返回当前时间。time.Unix(sec int64, nsec int64) Time:返回 Unix 时间。time.UnixMicro(usec int64) Time:返回 Unix 微秒时间。time.UnixMilli(msec int64) Time:返回 Unix 毫秒时间。
-
创建特定时间点
time.Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time:返回一个指定时间点的Time。time.Parse(layout, value string) (Time, error):解析一个时间字符串。time.ParseInLocation(layout, value string, loc *Location) (Time, error):在指定时区解析一个时间字符串。
-
时间格 式化和解析
t.Format(layout string) string:格式化时间点为字符串。t.AppendFormat(b []byte, layout string) []byte:将时间点格式化并追加到字节切片。time.Parse(layout, value string) (Time, error):解析一个时间字符串。time.ParseInLocation(layout, value string, loc *Location) (Time, error):在指定时区解析一个时间字符串。
-
时间点属性
t.Year() int:返回时间点的年份。t.Month() Month:返回时间点的月份。t.Day() int:返回时间点的日期。t.Hour() int:返回时间点的小时。t.Minute() int:返回时间点的分钟。t.Second() int:返回时间点的秒。t.Nanosecond() int:返回时间点的纳秒。t.Weekday() Weekday:返回时间点的星期几。t.ISOWeek() (year, week int):返回时间点对应的 ISO 周数和年份。
-
时间点比较
t.Before(u Time) bool:判断时间点是否在另一个时间点之前。t.After(u Time) bool:判断时间点是否在另一个时间点之后。t.Equal(u Time) bool:判断两个时间点是否相等。t.Compare(u Time) int:比较两个时间点,返回 -1、0 或 1。
-
时间点转换
t.In(loc *Location) Time:返回指定时区的时间点。t.Local() Time:返回本地时区的时间点。t.UTC() Time:返回 UTC 时区的时间点。