Go 语言中Select与for结合使用时可能会遇到的坑
2015-04-03 09:01
162 查看
作为一个刚接触go编程的新鸟,是不是被它的某些新特性给吓到,尤其是之前已经习惯了C++的编程。对于Go语言,网上褒贬不一,有极力推崇的,如七牛的许式伟,其对go的评价极高,并预言Go的市场占有率会一直逐步上升,取代java,成为第一。也有极力贬低的,他们一般会网络上有各种博客帖子,详细的剖析了go的不妥之处。而我接触go这段时间之后,不得不说,它真的是一门很有意思的语言,为什么用有意思形容呢,借用一句装逼的话,存在即合理。go能够慢慢被国内国外的各大互联网公司用于服务器架构,它自有它的闪光之处,而至于有意思呢,就需要对它有兴趣的人慢慢去发现,(呃。。。。这个情景导入有点长,貌似有点跑偏)
好,言归正传,最近在用go开发项目的过程中突然发现一个坑,尤其是对于其它传统语言转来的人来说一不住注意就掉坑里了,话不多说,show you the code。
解决方法一:使用golang中break的特性,在外层for加一个标签
解决方法二: 使用goto直接跳出循环
如上,成功从坑中走出。
好,言归正传,最近在用go开发项目的过程中突然发现一个坑,尤其是对于其它传统语言转来的人来说一不住注意就掉坑里了,话不多说,show you the code。
func test(){ i := 0 for { select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5{ fmt.Println("break now") break } fmt.Println("inside the select: ") } fmt.Println("inside the for: ") } }执行后发现,什么?居然break不出去?后来查了一下资料发现,当for 和 select结合使用时,break语言是无法跳出for之外的,因此若要break出来,这里需要加一个标签,使用goto, 或者break 到具体的位置
解决方法一:使用golang中break的特性,在外层for加一个标签
func test(){ i := 0 ForEnd: for { select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5{ fmt.Println("break now") break ForEnd } fmt.Println("inside the select: ") } fmt.Println("inside the for: ") } }
解决方法二: 使用goto直接跳出循环
func test(){ i := 0 for { select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5{ fmt.Println("break now") goto ForEnd } fmt.Println("inside the select: ") } fmt.Println("inside the for: ") } ForEnd: }
如上,成功从坑中走出。
相关文章推荐
- Go语言技巧:使用for range time.Tick()固定间隔时间执行
- go 语言for循环的使用
- Go语言技巧:使用select{}阻塞main函数
- Go 语言中gin使用gzip压缩遇到的问题
- Go语言中 select 使用
- A SELECT statement that assigns a value to a variable must ... (向变量赋值的 SELECT 语句不能与数据检索操作结合使用 )
- 使用Maven和Mybatis开发时,遇到“java.sql.SQLException: No suitable driver found for http://maven.apache.org”
- 在使用JavaBean时遇到的问题:The value for the useBean class attribute is invalid
- 当我们在程序中使用Packet32.h进行编程时,可能会遇到以下问题:
- jquery imgareaselect 使用利用js与程序结合实现图片剪切
- Go语言反射的使用
- Update 和 Select 结合使用,导入外部服务器的数据
- jquery imgareaselect 使用利用js与程序结合实现图片剪切
- 为什么我们要使用Go语言以及如何使用它的
- Microsoft Platform SDK for Windows Server 2003 R2与VC6的结合使用
- 使用 Go 语言和 HTML5 WebSocket 构建一个 Web 聊天室
- SQL Server WAITFOR Delay 使用变量遇到的问题和解决办法
- 使用ACE日志策略时遇到的问题:DLL::open failed for ACE: Error: check log for details Unable to find service 'Logger'
- 数据绑定控件和XmlDataSource控件结合使用,通过后台绑定Xml数据片段遇到的问题
- 使用htmlcontrol-for-symbian创建自定义list遇到的问题