发布时间:2024-11-05 20:28:11
```go package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(2 * time.Second) <-timer.C fmt.Println("定时器已触发") } ```
在上面的代码中,我们创建了一个2秒的定时器并等待其触发。当定时器完成计时后, `<-timer.C` 这一行代码会从定时器的通道中读取数据,从而实现了阻塞等待。触发后,打印出"定时器已触发"的消息。```go package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(2 * time.Second) go func() { <-timer.C fmt.Println("定时器已触发") }() time.Sleep(1 * time.Second) stop := timer.Stop() if stop { fmt.Println("定时器已停止") } } ```
在上述示例中,我们使用了协程来阻塞等待定时器的触发。通过调用`Stop()`方法,我们可以中止正在进行的计时器。需要注意的是,如果计时器已经触发并且停止失败,那么调用`Stop()`方法将返回`false`。```go package main import ( "fmt" "time" ) func main() { afterCh := time.After(2 * time.Second) <-afterCh fmt.Println("单次定时器触发") } ```
上述代码创建了一个2秒后触发的定时器,并通过`<-afterCh`从通道中读取数据,等待定时器的触发。当时间到达后,"单次定时器触发"的消息将被打印出来。 循环定时器可以通过组合使用`time.Tick()`和`for`循环来实现。下面是一个示例:```go package main import ( "fmt" "time" ) func main() { ticker := time.Tick(2 * time.Second) for range ticker { fmt.Println("循环定时器触发") } } ```
在上述代码中,我们通过使用`time.Tick()`函数创建了一个2秒钟间隔的定时器。然后,我们使用`for`循环对定时器的通道进行了遍历,从而实现了循环触发。当定时器触发时,打印出"循环定时器触发"的消息。