十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
可以使用net.Conn.Read()函数或net.Conn.Write()函数进行判断,如果返回错误信息,则表示连接已中断。也可以使用net.Conn.SetDeadline()函数来设置一个超时的deadline,如果在deadline内没有接收数据,则连接已中断。
公司主营业务:成都网站制作、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出贵池免费做网站回馈大家。
做了一个参考实例。假设某线程占用时间5秒,超时时间为2秒
func mian() {
lock := sync.Mutex{}
lock.Lock()
defer lock.Unlock()
timer := time.NewTimer(2 * time.Second)
end:=make(chan int)
go func() {
time.Sleep(5*time.Second)
fmt.Println("wait")
end-1
}()
select {
case -end:
case -timer.C:
}
fmt.Println("End")
}
个人理解的channel超时处理思路分享,若有错误或者不足,请联系我:qq 869329877
主程序通过go timeout()挂起一个协程,在timeout方法里面利用select来监控逻辑处理的变化,如果请求时间过长或者连接到其他服务比如grpc、mysql等服务中断导致的请求时间过长,则直接超时,超时要返回定义的管道数据结果,否则程序会报错。