超时时间示例
  1. func task(result chan<-int64){
  2. interval:= rand.Intn(10) //强制类型转换
  3. fmt.Println("sleep:",interval)
  4. time.Sleep(time.Duration(interval)*time.Second) //随机休眠
  5. result <-time.Now().unix()
  6. }
  7. func main(){
  8. rand.Seed(time.Now().Unix())
  9. // int
  10. var result chan int64 = make(chan int64)
  11. var timeout chan int = make(chan int)
  12. fmt.Println(time.Now())
  13. go task(result)
  14. go func(){
  15. time.Sleep(3*time.Second)
  16. close(timeout)
  17. }()
  18. // fmt.Println(<-result)
  19. select{
  20. case r:=<-result:
  21. fmt.Println("success:",r)
  22. case <-timout:
  23. fmt.Println("timeout")
  24. }
  25. }

以上结果,当task执行时间超过3秒时,会读取timeout管道,标志超时。

time.After ,time.Tick管道函数
  1. package main
  2. import(
  3. "fmt"
  4. "time"
  5. )
  6. func main(){
  7. fmt.Println(time.Now())
  8. fmt.Println(<-time.After(3*time.Second)) //阻塞3秒,打印3秒后的时间
  9. for now:=range time.Tick(3*time.Second){ //time.Tick经常和for循环连用,多久之后从管道输出一个当先时间
  10. fmt.Println(now)
  11. }
  12. }
文档更新时间: 2021-08-22 13:26   作者:张尚