可以使用select+default 實現無阻塞讀取,但需要注意default條件處理,避免丟失。
go func() { select { case eventChan <- value: fmt.Println("add chan done") default: fmt.Println("default:", value)// receiving from c would block } }()
可以使用select+Timeout 超時機制,超過一定時間後就做其他事情,給通道增加讀寫數據的時間
go func() { timeout := time.NewTimer(time.Microsecond * 500) select { case eventChan <- value: fmt.Println("add chan done") case <-timeout.C: fmt.Println("write time out") } }()
Last updated 2 years ago