当前位置:网站首页>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...")
}
}
边栏推荐
- From zero to one, I will teach you to build a "search by text and map" search service (I)
- One article tells you what kubernetes is
- English语法_形容词/副词3级 - 比较级
- 仅用递归函数和栈操作逆序一个栈
- 从零到一,教你搭建「以文搜图」搜索服务(一)
- 窗帘做EN 1101易燃性测试过程是怎么样的?
- Chapter 1 Introduction to bash
- Arrangement of basic electrical knowledge (II)
- Single responsibility principle
- PostgreSQL 实现批量更新、删除、插入
猜你喜欢

first. Net core MVC project

27年,微软IE结束了!

RT-Thread 双向链表(学习笔记)

歐洲家具EN 597-1 跟EN 597-2兩個阻燃標准一樣嗎?

Leetcode: monotonic stack structure (Advanced)

Secouer le son et se battre ~ prêter attention au blogueur

In the era of video explosion, who is supporting the high-speed operation of video ecological network?

《性能之巅第2版》阅读笔记(二)--性能观察工具

多项目开发入门,基础设计 类库项目使用

第一章 Bash 入门
随机推荐
11_刻意练习精讲
English notes - cause and effect
C语言十进制与BCD码的相互转换
Understanding and learning of parental delegation mechanism
Uncertainty principle
Introduction to SQLSERVER database
Building log analysis system with elk (II) -- deployment and installation
歐洲家具EN 597-1 跟EN 597-2兩個阻燃標准一樣嗎?
Arrangement of basic electrical knowledge (II)
Zipkin service link tracking
GenICam GenTL 标准 ver1.5(2)
@Several scenarios of transactional failure
【MySQL】多表连接查询
Pinda general permission system (day 5~day 6)
ambari SSLError: Failed to connect. Please check openssl library versions.
欧洲家具EN 597-1 跟EN 597-2两个阻燃标准一样吗?
Reading notes of top performance version 2 (II) -- CPU monitoring
抖音实战~关注博主
applicationContext. Getbeansoftype obtains the execution methods of all implementation classes under an interface or obtains the operation application scenarios such as implementation class objects. L
[small program practice series] e-commerce platform source code and function implementation