标签:focus package data- pre make 读取 data 表达 select
select语句的语法结构和switch语句很相似,也有case语句和default语句:
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
说明:
每个case都必须是一个通信
所有channel表达式都会被求值
所有被发送的表达式都会被求值
如果有多个case都可以运行,select会随机公平地选出一个执行。其他不会执行。
否则:
如果有default子句,则执行该语句。
package main
import (
"fmt"
"time"
)
func main() {
/*
分支语句:if,switch,select
select语句类型于switch语句
但是select语句会随机执行一个可运行的case
如果没有case可以运行,要看是否有default,如果有就执行default,否则就进入阻塞,直到有case可以运行
*/
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
time.Sleep(3 * time.Second)
ch1 <- 100
}()
go func() {
time.Sleep(3 * time.Second)
ch2 <- 200
}()
select {
case num1 := <-ch1:
fmt.Println("ch1中获取的数据。。", num1)
case num2, ok := <-ch2:
if ok {
fmt.Println("ch2中读取的数据。。", num2)
} else {
fmt.Println("ch2通道已经关闭。。")
}
default:
fmt.Println("default语句。。。")
}
fmt.Println("main..over...")
}
标签:focus package data- pre make 读取 data 表达 select
原文地址:https://www.cnblogs.com/yzg-14/p/12254567.html