go select case 随机调用
package main
import (
"fmt"
"runtime"
)
/*
1. go select是一种仅能用于channel发送和接收消息的语句,此语句运行期间是阻塞的;当 select中没有case语句的时候,会阻塞当前goroutine
2. select是go在语言层面提供的IO多路复用机制,专门用于检测多个channel是否准备完毕:可读可写
3. select语句中除default外,每个case操作一个channel,要么读要么写
4. select语句中除default外,各case的执行顺序是完全随机的
5. select中如果没有default语句,则会阻塞等待任一case
6. select语句中读操作要判断是否成功读取,关闭的channel也可以读取
*/
func main() {
runtime.GOMAXPROCS(1)
int_chan := make(chan int, 1)
string_chan := make(chan string, 1)
int_chan <- 1
string_chan <- "hello"
select {
case value := <-int_chan:
fmt.Println(value)
case value := <-string_chan:
fmt.Println(value)
}
//有的时候输出1,有的时候输出hello
}
posted on 2022-10-17 11:26 running-fly 阅读(45) 评论(0) 收藏 举报
浙公网安备 33010602011771号