go select 語句中發送和接收操作之間是否有優先級規則?由于“發送”操作始終準備就緒,不像“接收”操作等待來自通道的某些內容,我總感覺“發送”將首先在選擇上執行。我嘗試了一些代碼來測試發送和接收都準備好時會發生什么:package mainimport ( "fmt" "time")func main() { ch1 := make(chan string) ch2 := make(chan string) go goOne(ch1) go goTwo(ch2) time.Sleep(time.Second * 2) select { case ch2 <- "To goTwo goroutine": case msg1 := <-ch1: fmt.Println(msg1) }}func goOne(ch chan string) { ch <- "From goOne goroutine"}func goTwo(ch chan string) { msg := <-ch fmt.Println(msg)}結果似乎總是“來自 goOne goroutine”。所以看起來接收操作具有優先級。但這是設計效果嗎?還是會發生先執行發送的情況?我在文檔中找不到信息如果我希望接收操作具有優先權,我可以依賴它還是應該做其他事情?
go select語句中發送和接收操作之間的優先級規則
慕的地8271018
2022-11-15 17:11:31