go select 语句中发送和接收操作之间是否有优先级规则?
由于“发送”操作始终准备就绪,不像“接收”操作等待来自通道的某些内容,我总感觉“发送”将首先在选择上执行。
我尝试了一些代码来测试发送和接收都准备好时会发生什么:
package main
import (
"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”。所以看起来接收操作具有优先级。但这是设计效果吗?还是会发生先执行发送的情况?我在文档中找不到信息
如果我希望接收操作具有优先权,我可以依赖它还是应该做其他事情?
慕的地8271018
侃侃无极
随时随地看视频慕课网APP
相关分类