go select 与 for 区别_Go 面试每天一篇(第 102 天)
点击上方蓝色“Golang来啦”关注我哟
加个“星标”,天天 15 分钟,一起学 Go
你好哇,欢迎来答题,一起来看下昨天题目的解析:
1.关于循环语句,下面说法正确的有?
A. 循环语句既支持 for 关键字,也支持 while 和 do-while;
B. 关键字for的基本使用方法与C/C++中没有任何差异;
C. for 循环支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break,可以选择中断哪一个循环;
D. for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量;
参考答案及解析:CD。
2.下面代码的功能是从小到大找出 17 和 38 的 3 个公倍数,请问下面的代码有什么问题?
1var ch chan int = make(chan int) 2 3func generate() { 4 for i := 17; i 5000; i += 17 { 5 ch 6 time.Sleep(1 * time.Millisecond) 7 } 8 close(ch) 9}1011func main() {12 timeout := time.After(800 * time.Millisecond)13 go generate()14 found := 015 for {16 select {17 case i, ok := 18 if ok {19 if i%38 == 0 {20 fmt.Println(i, "is a multiple of 17 and 38")21 found++22 if found == 3 {23 break24 }25 }26 } else {27 break28 }29 case 30 fmt.Println("timed out")31 break32 }33 }34 fmt.Println("The end")35}
参考答案即解析:break 会跳出 select 块,但不会跳出 for 循环。这算是一个比较容易掉的坑。可以使用 break label 特性或者 goto 功能解决这个问题,这里使用 break label 作个示例。
1var ch chan int = make(chan int) 2 3func generate() { 4 for i := 17; i 5000; i += 17 { 5 ch 6 time.Sleep(1 * time.Millisecond) 7 } 8 close(ch) 9}1011func main() {12 timeout := time.After(800 * time.Millisecond)13 go generate()14 found := 015 MAIN_LOOP:16 for {17 select {18 case i, ok := 19 if ok {20 if i%38 == 0 {21 fmt.Println(i, "is a multiple of 17 and 38")22 found++23 if found == 3 {24 break MAIN_LOOP25 }26 }27 } else {28 break MAIN_LOOP29 }30 case 31 fmt.Println("timed out")32 break MAIN_LOOP33 }34 }35 fmt.Println("The end")36}
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
1.ch := make(chan interface{}) 和 ch := make(chan interface{},1) 有什么区别?
2.下面的代码输出什么?请简要说明。
1var mu sync.Mutex 2var chain string 3 4func main() { 5 chain = "main" 6 A() 7 fmt.Println(chain) 8} 9func A() {10 mu.Lock()11 defer mu.Unlock()12 chain = chain + " --> A"13 B()14}1516func B() {17 chain = chain + " --> B"18 C()19}2021func C() {22 mu.Lock()23 defer mu.Unlock()24 chain = chain + " --> C"25}
A. 不能编译;
B. 输出 main --> A --> B --> C;
C. 输出 main;
D. fatal error;
引自博客《鸟窝》 https://colobu.com/
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
ps:看完文章如果有收获,顺手花 1s 时间帮点下文末右下方的「在看」,感激!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
推荐阅读:
Go 语言机制之栈与指针
如果 map 不是引用变量,那是什么?
如果我的文章对你有所帮助,点赞、转发都是一种支持!
给个[在看],是对四哥最大的支持
go select 与 for 区别_Go 面试每天一篇(第 102 天)相关推荐
- select,poll,epoll区别面试常问
select,poll,epoll区别: select优点 1)select()的可移植性更好,在某些Unix系统上不支持poll() 2)select() 对于超时值提供了更好的精度:微秒,而pol ...
- SQL Server 中 SELECT INTO 和 INSERT INTO SELECT语句的区别
SQL Server 中 SELECT INTO 和 INSERT INTO SELECT语句的区别 我们在写存储过程的时候经常会遇到需要将查询到的数据存到一张表里面的情况,如将一个table1的数据 ...
- GET 和 POST 的区别(重要,面试常问)
GET 和 POST 的区别(重要,面试常问) 1.GET 在浏览器回退时是无害的,而 POST 会再次提交请求. (get:不会再次发送请求:post:浏览器会继续向URI发送请求) 2.GET 产 ...
- SQL Server中SET赋值和SELECT赋值的区别
2019独角兽企业重金招聘Python工程师标准>>> 一.SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值 SELECT @VAR1='Y',@VAR ...
- 通过set赋值,与select赋值的区别
---通过set赋值,与select赋值的区别. declare @a int --set @a=(select count(*) from TblStudent) select @a=count(* ...
- Callable和Runnable的区别(面试常考),看完就懂
Callable和Runnable的区别(面试常考),看完就懂 Callable 接口 测试类 Runnable 接口 测试类 两者的区别 补充Executor框架 Callable 接口 publi ...
- go和python区别_Go语言和Python哪一个更容易学呢?
Python和Go都是用于编写Web应用程序的强大的高级编程语言,它们之间有什么区别吗?下面本篇文章就来带大家认识一下Python和Go语言,介绍一下Python和Go之间的区别,希望对大家有所帮助. ...
- iOS面试准备 - ios篇
iOS面试准备 - ios篇 ios面试准备 - objective-c篇 ios面试准备 - 网络篇 IOS面试准备 - C++篇 iOS面试准备 - 其他篇 运行时 https://juejin. ...
- 【游戏客户端与服务器面试题】-- 2022年最新游戏客户端与服务器面试(lua篇持续更新)
[游戏客户端与服务器面试题干货]-- 2022年度最新游戏客户端面试干货(lua篇) 文章目录 一.Lua的8种数据类型 (1) nil 类型 (2) boolean类型 (3) number类型 1 ...
最新文章
- matlab svr 预测,SVR 多目标预测
- mybatis的一些基础问题
- as3corelib系列教程之一:ArrayUtil类的用法
- SAP Fiori pageSet请求的处理原理
- 项目接入实现复杂布局的vlayout
- [转载] Java的访问修饰符、非访问修饰符分类详细总结以及修饰符用途总结
- ubuntu 安装 teamViewer 出现错误
- Egret + TiledMap 快速上手
- Oracle优化新常态 前半生
- 干货 | 手把手带你搞硬件设计!
- Shopee店铺爆单赚钱核心方法!跨境商家必学技能(干货建议收藏)
- php财务软件的报表如何实现,浪潮财务软件如何实现汇总报表系统调整表的接收 | 浪潮888博客...
- GeForce Experience 安装时乱码解决
- 帕拉丁(山东)俱乐部大型西藏自驾游,天籁之旅,与心灵自由相约
- python编程学习笔记(三)
- 消失的网秦:创始人遭绑架 414 天,睡觉都戴手铐
- include指令包含网站banner和版权信息栏
- 计算机视觉传达论文库,计算机图形视觉传达论文
- 博主文章导航(分门别类,实时更新,永久置顶)
- AD9361使用概述