网站首页 > 博客文章 正文
跟着小火柴,我们接着来练习Go语言重的select。select是Go在语言层面提供的多路I/O复用机制,用于检测多个管道是否就绪(即可读或可写),其特性与管道息息相关。接下来看两道select自测题目。
题目一:下面的函数输出什么(单选)?
func SelectExam1() {
c1 := make(chan int, 10)
c2 := make(chan int, 10)
c1 <- 1
c2 <- 2
select {
case <-c1:
fmt.Println("c1")
case <-c2:
fmt.Println("c2")
}
}
A:函数输出c1。
B:函数输出c2。
C:函数输出c1、c2。
D:函数可能输出c1,也可能输出c2。
答案:本题答案为D。题目考察select的case语句执行顺序的知识点。题目中的两个管道均可读取,所以select中的两个case语句可读取管道,此时执行顺序是随机的,即函数可能输出c1,也可能输出c2。
题目二:下面的函数输出什么(单选)?
func SelectExam2() {
c := make(chan int)
select {
case <-c:
fmt.Printf("readable")
case c <- 1:
fmt.Println("writable")
}
}
A:函数输出readable。
B:函数输出writable。
C:函数什么也不输出,正常返回。
D:函数什么也不输出,陷入阻塞。
答案:本题答案为D。题目考察select的case语句执行顺序的知识点。题目中的管道没有缓冲区,所以既不可读也不可写,两个case语句都会阻塞,此时函数会阻塞。
本题选自《Go专家编程(第2版)》第1章
本书内容:本书深入地讲解了 Go 语言常见特性的内部机制和实现方式,大部分内容源自对 Go 源码的分析,并从中提炼出实现原理。通过阅读本书,读者可以快速、轻松地了解 Go 语言的内部运作机制。在结构上采取题目引入-特性分析-原理解析的模式,让读者从实践入手逐步深入原理,由浅入深掌握知识原理。
本书适合:
Go语言程序员;
对Go语言感兴趣的技术人员;
即将进入互联网行业的新手程序员。
- 上一篇: Go:从 context 源码领悟接口的设计
- 下一篇: 通过go脚本编写自动化备份脚本(minio)
猜你喜欢
- 2024-10-03 关于go语言中的协程相关知识点总结(三)
- 2024-10-03 详解MS SQL日常维护管理脚本--第二部分
- 2024-10-03 go语言goroutine调度原理以及channel详解
- 2024-10-03 SQL SERVER:索引概述及创建与使用(41)
- 2024-10-03 SQL Server 联接概述(sqlserver连接工具有哪些)
- 2024-10-03 从OOM的角度,带你了解虚拟内存机制
- 2024-10-03 golang开发:select多路选择(golang elseif)
- 2024-10-03 从0开始学Golang编程-基础语法(golang语言基础)
- 2024-10-03 非阻塞的Go channel(非阻塞的症状)
- 2024-10-03 数据库加锁原理举例说明(数据库加锁解锁)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)