当前位置:网站首页>Go language -select statement
Go language -select statement
2022-06-28 04:12:00 【Crying while learning】
Preface
select yes go A choice statement provided in the language .select The syntax of is similar to switch sentence , It also belongs to the control statement .
What then? select The statement we didn't put in and if、switch Statement together ?
because select It's cooperation channel The channel uses . Every case It has to be a communication operation , Either send or receive .
Feature summary
- select It can only be used for channel operation , Every case Must be a channel;
- If there are more than one case It is permissible to (channel There's no obstruction ), Then select one at random case Statement execution ;
- without case Statement can execute (channel happening ), Cut no default sentence , be select Statements block ;
- without case Statement can execute (channel happening ), Yes default sentence , execute default sentence ;
- Generally, timeout statements are used instead of default sentence ;
- If case Statement channel by nil, Then ignore the branch , It's equivalent to from select The branch was deleted in ;
- If select Statements in for In circulation , Generally not used default sentence , Because it will cause CPU The problem of high occupancy .
select sentence
select Grammar format
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* You can define any number of case */
default : /* Optional */
statement(s);
}Example
select It can only be used for channel operation , Every case Must be a channel. And channel Is read / Writing is OK .
func main() {
ch1 := make(chan int)
ch2 := make(chan string)
go func() {
ch1 <- 100
}()
go func() {
num2 := <-ch2
fmt.Println(num2)
}()
select {
case num1 := <-ch1: // Read channel data
fmt.Println("ch1 The data in is :", num1)
case ch2 <- "201": //channel Write data
fmt.Println("ch2 There's data written in ")
}
}
Randomness
If more than one case Statements can be executed , Then execute one randomly .
Example , Two article case Statements can be executed . Multiple executions can reveal ,case Statements are executed at random .
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
ch1 <- 100
}()
go func() {
ch2 <- 200
}()
select {
case num1 := <-ch1:
fmt.Println("ch1 The data in is :", num1)
case num2 := <-ch2:
fmt.Println("ch2 The data in is :", num2)
}
}
Deadlock
If all case Statements are blocked , Cut no default Statement and timeout statement , The program will report an error deadlock .
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
select {
case <-ch1:
fmt.Println("ch1")
case <-ch2:
fmt.Println("ch2")
}
}
default sentence
If all case Statements are blocked , Yes default In words , Will execute default sentence .
Pay attention to if select Statements in for In circulation ,default Statements may cause CPU Occupy too much .
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
select {
case num1 := <-ch1:
fmt.Println("ch1 The data in is :", num1)
case num2 := <-ch2:
fmt.Println("ch2 The data in is :", num2)
default:
fmt.Println(" The channel is blocked ...default")
}
}
Timeout statement
Generally, timeout statements are used instead of default sentence .
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
select {
case num1 := <-ch1:
fmt.Println("ch1 The data in is :", num1)
case num2 := <-ch2:
fmt.Println("ch2 The data in is :", num2)
case <-time.After(3 * time.Second):
fmt.Println("timeout...")
}
}
边栏推荐
- MSC 307(88) (2010 FTPC Code) Part 5低播焰测试
- Building a server monitoring platform with telegraf influxdb grafana
- Web APIs DOM event foundation dark horse programmer
- 【Linux】【Mysql】ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘
- Elk builds log analysis system + Zipkin service link tracking integration
- 窗帘做EN 1101易燃性测试过程是怎么样的?
- Backtracking maze problem
- Door level modeling - learning notes
- Conversion between decimal and BCD codes in C language
- Reading notes of top performance version 2 (II) -- Performance observation tool
猜你喜欢

MySQL master-slave replication, separation and resolution

@Transactional失效的几种场景

Problems with cat and dog queues

揭开SSL的神秘面纱,了解如何用SSL保护数据
![[small program practice series] e-commerce platform source code and function implementation](/img/a4/581d73c2ff5c190edc3d8438fa2122.png)
[small program practice series] e-commerce platform source code and function implementation

MySQL 主从复制、分离解析

视频爆炸时代,谁在支撑视频生态网高速运行?

2021 year end summary and 2022 outlook

Are the two flame retardant standards of European furniture en 597-1 and en 597-2 the same?

简单工厂模式
随机推荐
How to learn a programming language systematically| Dark horse programmer
利用ELK 搭建日志分析系统(三)—— 安全认证
Reading notes of top performance version 2 (II) -- Performance observation tool
One article tells you what kubernetes is
02 MongoDB数据类型、重要概念以及shell常用指令
11_刻意练习精讲
Supplementary questions of monthly competition
After launching the MES system, these changes have taken place in the enterprise
美创数据安全管理平台获信通院“数据安全产品能力验证计划”评测证书
指针链表
Problems with cat and dog queues
月赛补题
Building log analysis system with elk (II) -- deployment and installation
In the era of video explosion, who is supporting the high-speed operation of video ecological network?
基于arm5718的Shell脚本参数传递的2种方法
ELK 搭建日志分析系统 + Zipkin服务链路追踪整合
Detailed explanation of KVM common commands
English语法_形容词/副词3级-比较级_常用短语
English grammar_ Adjective / adverb Level 3 - Comparative_ Useful Expressions
Uncertainty principle