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  阅读(24)  评论(0编辑  收藏  举报

导航