基于此示例(https://gobyexample.com/timers),计时器可以停止或过期。但有什么区别?
package main
import "time"
import "fmt"
func main() {
timer1 := time.NewTimer(time.Second*2)
<-timer1.C
fmt.Println("Timer 1 expired")
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 expired")
} ()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}
答案 0 :(得分:1)
使用某个duration d
(在创建时指定)创建的计时器在此类持续时间过去后到期。这意味着等待具有持续时间d
的定时器的通道仅在持续时间过去之后(可能甚至更晚,取决于调度)解锁调用者。计时器到期可以被认为是事件触发。
如果在创建Timer后,您想要阻止其过期(例如,因为您不再对等待感兴趣),您可以Stop()定时器。当使用AfterFunc()创建Timer时,这更有用,以取消预定的函数执行。
答案 1 :(得分:0)
Expired表示计时器已经过去并在通道上发送了时间。 Stop()表示程序不再需要时间触发 - 如果成功停止则返回true,如果计时器已经触发并在通道上发送时间则返回false。
有关详细信息,请参阅https://golang.org/pkg/time/#Timer.Stop。