当前位置:网站首页>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...")
}
}
边栏推荐
- 回溯—迷宫问题
- AspNetCoreRateLimit 速率限制 接口访问限制 限流控制
- English notes - cause and effect
- Visualization of loss using tensorboard
- 上线MES系统后,企业发生了这些变化......
- What are the password requirements for waiting insurance 2.0? What are the legal bases?
- A preliminary study of blackbody radiation
- 04 summary of various query operations and aggregation operations of mongodb
- MSC 307(88) (2010 FTPC Code) Part 5低播焰测试
- first. Net core MVC project
猜你喜欢

光伏板怎么申请ASTM E108阻燃测试?

02 MongoDB数据类型、重要概念以及shell常用指令

Notes to friendship chain

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

@Several scenarios of transactional failure

Staggered and permutation combination formula

02 mongodb data types, important concepts and common shell instructions

抖音实战~取关博主

Understanding and learning of parental delegation mechanism

2021年终总结及2022年展望
随机推荐
上线MES系统后,企业发生了这些变化......
@Transactional失效的几种场景
A Preliminary Study of Blackbody radiation
Meichuang was selected into the list of "2022 CCIA top 50 Chinese network security competitiveness"
基于arm5718的Shell脚本参数传递的2种方法
27年,微软IE结束了!
In the era of video explosion, who is supporting the high-speed operation of video ecological network?
利用 telegraf influxdb grafana 搭建服务器监控平台
MSc 307 (88) (2010 FTPC code) Part 9 bedding test
仅用递归函数和栈操作逆序一个栈
黑體輻射初探
Introduction to SQLSERVER database
简单工厂模式
Building log analysis system with elk (II) -- deployment and installation
11_刻意练习精讲
How the uni app automatically switches the requested address according to the environment
软件测试报告怎么编写?第三方性能报告范文模板来了
How to write a software test report? Here comes the third party performance report template
多项目设计开发·类库项目引入入门
Building log analysis system with elk (III) -- Security Authentication