您好,登录后才能下订单哦!
这篇文章主要介绍“Go流程控制代码怎么写”,在日常操作中,相信很多人在Go流程控制代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go流程控制代码怎么写”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1、简单格式(不支持三目运算符) if 布尔表达式 { // 执行语句 } 2、if里面包含多个表达式的时候,使用‘;'隔开
1、var1可以是任何类型,value1和value2可以是同类型的人和值 switch var1 { case value1: xxx case value2: xxx default: yyy }
1、Type Switch
switch还可以被用于type-switch来判断某个interface变量中实际存储的变量类型
switch x.(type) { case type: statement(s) case type: statement(s) default: statement(s) }
select语句类似switch语句,但select会随机执行一个可运行的case,如果没有case可运行,它将阻塞,直到有case可运行。
select { case communication clause : statement(s) case communication clause : statement(s) default: statement(s) } // 解释:每个case必须是一个通信,所有的channel表达式都会被求值,所有被发送的表达式都会被求值, // 1、如果任意某个通信可以执行,就执行,其余忽略 // 2、如果有多个case可以执行,select随机且公平的选出一个执行 // 3、否则:如果有default语句,执行;没有default,select将阻塞,直到某个通信可以运行,Go不会重新对Channel或值进行求职
1、golang select的使用以及典型用法
1、基本使用:
用于处理异步IO操作,select会监听case语句中的channel的读写操作,当case中channel读写操作为非阻塞状态,将触发相应的动作。(case语句必须是channel操作)
2、典型用法:
1)超时判断
//比如在下面的场景中,使用全局resChan来接受response,如果时间超过3S,resChan中还没有数据返回,则第二条case将执行 var resChan = make(chan int) // do request func test() { select { case data := <-resChan: doData(data) case <-time.After(time.Second * 3): fmt.Println("request time out") } } func doData(data int) { //... }
2)退出
//主线程(协程)中如下: var shouldQuit=make(chan struct{}) fun main(){ { //loop } //...out of the loop select { case <-c.shouldQuit: cleanUp() return default: } //... } //再另外一个协程中,如果运行遇到非法操作或不可处理的错误,就向shouldQuit发送数据通知程序停止运行 close(shouldQuit)
3)判断channel是否阻塞
//在某些情况下是存在不希望channel缓存满了的需求的,可以用如下方法判断 ch := make (chan int, 5) //... data:=0 select { case ch <- data: default: //做相应操作,比如丢弃data。视需求而定 }
for init; condition; post {} for condition {} for {} // 解释:1)init一般为赋值表达式,给控制变量赋初始值;2)condition:关系表达式或逻辑表达式,循环控制条件;3)post:一般为赋值表达式,给控制变量增量或减量 // 执行流程:判别赋值表达式init是否满足condition给定的条件,若为真,则执行循环语句,然后执行post,进入第二轮循环
for key, value := range oldMap { newMap[key] = value }
for 和 for range 有什么区别?
1、使用场景:
1)for可以遍历array、slice、key为整形递增的map、string
2)for range 可以完成for所有事情,却能做for不能做的事情,包括遍历key为string类型的map、遍历channel
Goto、Break、Continue 1、三个语句都可以配合标签(label)使用 2、标签名区分大小写,定义后若不是用会造成编译错误 3、continue、break配合标签(label)可以用于多层循环跳出 4、goto调整执行位置,与continue、break配合标签(label)的结果并不相同
到此,关于“Go流程控制代码怎么写”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。