当前位置:网站首页>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...")
}
}
边栏推荐
- 02 MongoDB数据类型、重要概念以及shell常用指令
- 仅用递归函数和栈操作逆序一个栈
- Notes to friendship chain
- Secouer le son et se battre ~ prêter attention au blogueur
- A Preliminary Study of Blackbody radiation
- 黑體輻射初探
- 软件测试报告怎么编写?第三方性能报告范文模板来了
- What is the process of en 1101 flammability test for curtains?
- English notes - cause and effect
- Two methods of shell script parameter passing based on arm5718
猜你喜欢

Introduction notes to machine learning

How to learn a programming language systematically| Dark horse programmer

Staggered and permutation combination formula

Reading notes of top performance version 2 (II) -- Performance observation tool

抖音实战~取关博主

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

多项目设计开发·类库项目引入入门

The operating mechanism of spectrogram in audio Science

Multi project design and development · introduction to class library project

机器学习入门笔记
随机推荐
猫狗队列的问题
用一个栈实现另一个栈的排序
sqlserver 数据库之事物使用入门 案例
从零到一,教你搭建「以文搜图」搜索服务(一)
【MySQL】多表连接查询
指针链表
利用 telegraf influxdb grafana 搭建服务器监控平台
月赛补题
利用ELK 搭建日志分析系统(二)—— 部署安装
利用ELK 搭建日志分析系统(三)—— 安全认证
Meichuang data security management platform has obtained the evaluation certificate of "data security product capability verification plan" of the Institute
Reading notes of top performance version 2 (II) -- CPU monitoring
Staggered and permutation combination formula
PostgreSQL implements batch update, deletion and insertion
Une seule pile dans l'ordre inverse avec des fonctions récursives et des opérations de pile
品达通用权限系统(Day 5~Day 6)
错排兼排列组合公式
Iso8191 test is mentioned in as 3744.1. Are the two tests the same?
@Transactional失效的几种场景
由两个栈组成的队列