實現(xiàn)原理:
并發(fā)一個函數(shù),等待1s后向timeout寫入數(shù)據(jù),在select
中如果1s之內(nèi)有數(shù)據(jù)向其他channel
寫入則會順利執(zhí)行,如果沒有,這是timeout
寫入了數(shù)據(jù),則我們知道超時了。
實現(xiàn)代碼:
package main import "fmt" import "time" func main() { ch := make(chan int, 1) timeout := make(chan bool, 1) // 并發(fā)執(zhí)行一個函數(shù),等待1s后向timeout寫入true go func() { time.Sleep(1000) timeout - true }() // 這里會等待ch或timeout讀出數(shù)據(jù) // 因為一直沒有向ch寫入數(shù)據(jù) // 在1s后向timeout寫入了數(shù)據(jù) // 所以執(zhí)行了timeout的case // 利用這個技巧可以實現(xiàn)超時操作 select { case - ch : fmt.Println("read from ch") case - timeout : fmt.Println("time out...") } }
總結(jié)
以上就是這篇文章的全部內(nèi)容,希望對大家的學(xué)習(xí)或者工作帶來一定的幫助,如果有疑問大家可以留言交流。