實現原理:
并發一個函數,等待1s后向timeout寫入數據,在select中如果1s之內有數據向其他channel寫入則會順利執行,如果沒有,這是timeout寫入了數據,則我們知道超時了。
實現代碼:
package main
import "fmt"
import "time"
func main() {
ch := make(chan int, 1)
timeout := make(chan bool, 1)
// 并發執行一個函數,等待1s后向timeout寫入true
go func() {
time.Sleep(1000)
timeout <- true
}()
// 這里會等待ch或timeout讀出數據
// 因為一直沒有向ch寫入數據
// 在1s后向timeout寫入了數據
// 所以執行了timeout的case
// 利用這個技巧可以實現超時操作
select {
case <- ch :
fmt.Println("read from ch")
case <- timeout :
fmt.Println("time out...")
}
}
總結
以上就是這篇文章的全部內容,希望對大家的學習或者工作帶來一定的幫助,如果有疑問大家可以留言交流。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。