超时时间示例
func task(result chan<-int64){
interval:= rand.Intn(10) //强制类型转换
fmt.Println("sleep:",interval)
time.Sleep(time.Duration(interval)*time.Second) //随机休眠
result <-time.Now().unix()
}
func main(){
rand.Seed(time.Now().Unix())
// int
var result chan int64 = make(chan int64)
var timeout chan int = make(chan int)
fmt.Println(time.Now())
go task(result)
go func(){
time.Sleep(3*time.Second)
close(timeout)
}()
// fmt.Println(<-result)
select{
case r:=<-result:
fmt.Println("success:",r)
case <-timout:
fmt.Println("timeout")
}
}
以上结果,当task执行时间超过3秒时,会读取timeout管道,标志超时。
time.After ,time.Tick管道函数
package main
import(
"fmt"
"time"
)
func main(){
fmt.Println(time.Now())
fmt.Println(<-time.After(3*time.Second)) //阻塞3秒,打印3秒后的时间
for now:=range time.Tick(3*time.Second){ //time.Tick经常和for循环连用,多久之后从管道输出一个当先时间
fmt.Println(now)
}
}
文档更新时间: 2021-08-22 13:26 作者:张尚