1: select 是golang 中的一个控制结构,类似于switch语句,用于处理一部IO操作。select会监听case语句中的channel读写操作,当case中 channel读写操作为非阻塞状态会出发相应操作;
2:select 中的case语句必须是一个channel操作;
3:select 中的default语句总是可以运行的;
4:如果有多个case都可以运行,select会随机公平的选择一个执行,其它的不会是执行;
5:如果没有可执行的case语句,且有default语句,那么就会执行default;
6:如果没有可执行的case语句,也没有可执行的default语句,那么sellect将会阻塞,直到某个case可以运行;
package main
import (
"fmt"
"time"
)
var intChan = make(chan int)
var stringChan = make(chan string)
func main() {
go func() {
intChan <- 100
stringChan <- "aaa"
defer close(intChan)
defer close(stringChan)
}()
for {
select {
case r := <-intChan:
fmt.Printf("r..: %v\n", r)
case s := <-stringChan:
fmt.Printf("s..: %v\n", s)
default:
fmt.Println("default........")
}
time.Sleep(time.Second * 2)
}
}