Go流程控制代码怎么写

其他教程   发布日期:2025年03月24日   浏览次数:111

这篇文章主要介绍“Go流程控制代码怎么写”,在日常操作中,相信很多人在Go流程控制代码怎么写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go流程控制代码怎么写”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Go流程控制

1、条件语句IF

  1. 1、简单格式(不支持三目运算符)
  2. if 布尔表达式 {
  3. // 执行语句
  4. }
  5. 2if里面包含多个表达式的时候,使用‘;'隔开

2、条件语句switch

  1. 1var1可以是任何类型,value1value2可以是同类型的人和值
  2. switch var1 {
  3. case value1:
  4. xxx
  5. case value2:
  6. xxx
  7. default:
  8. yyy
  9. }

1、Type Switch

switch还可以被用于type-switch来判断某个interface变量中实际存储的变量类型

  1. switch x.(type) {
  2. case type:
  3. statement(s)
  4. case type:
  5. statement(s)
  6. default:
  7. statement(s)
  8. }

3、条件语句select

select语句类似switch语句,但select会随机执行一个可运行的case,如果没有case可运行,它将阻塞,直到有case可运行。

  1. select {
  2. case communication clause :
  3. statement(s)
  4. case communication clause :
  5. statement(s)
  6. default:
  7. statement(s)
  8. }
  9. // 解释:每个case必须是一个通信,所有的channel表达式都会被求值,所有被发送的表达式都会被求值,
  10. // 1、如果任意某个通信可以执行,就执行,其余忽略
  11. // 2、如果有多个case可以执行,select随机且公平的选出一个执行
  12. // 3、否则:如果有default语句,执行;没有default,select将阻塞,直到某个通信可以运行,Go不会重新对Channel或值进行求职

1、golang select的使用以及典型用法

1、基本使用:

用于处理异步IO操作,select会监听case语句中的channel的读写操作,当case中channel读写操作为非阻塞状态,将触发相应的动作。(case语句必须是channel操作)

2、典型用法:

1)超时判断

  1. //比如在下面的场景中,使用全局resChan来接受response,如果时间超过3S,resChan中还没有数据返回,则第二条case将执行
  2. var resChan = make(chan int)
  3. // do request
  4. func test() {
  5. select {
  6. case data := <-resChan:
  7. doData(data)
  8. case <-time.After(time.Second * 3):
  9. fmt.Println("request time out")
  10. }
  11. }
  12. func doData(data int) {
  13. //...
  14. }

2)退出

  1. //主线程(协程)中如下:
  2. var shouldQuit=make(chan struct{})
  3. fun main(){
  4. {
  5. //loop
  6. }
  7. //...out of the loop
  8. select {
  9. case <-c.shouldQuit:
  10. cleanUp()
  11. return
  12. default:
  13. }
  14. //...
  15. }
  16. //再另外一个协程中,如果运行遇到非法操作或不可处理的错误,就向shouldQuit发送数据通知程序停止运行
  17. close(shouldQuit)

3)判断channel是否阻塞

  1. //在某些情况下是存在不希望channel缓存满了的需求的,可以用如下方法判断
  2. ch := make (chan int, 5)
  3. //...
  4. data:=0
  5. select {
  6. case ch <- data:
  7. default:
  8. //做相应操作,比如丢弃data。视需求而定
  9. }

4、循环语句for

  1. for init; condition; post {}
  2. for condition {}
  3. for {}
  4. // 解释:1)init一般为赋值表达式,给控制变量赋初始值;2)condition:关系表达式或逻辑表达式,循环控制条件;3)post:一般为赋值表达式,给控制变量增量或减量
  5. // 执行流程:判别赋值表达式init是否满足condition给定的条件,若为真,则执行循环语句,然后执行post,进入第二轮循环

5、循环语句range

  1. for key, value := range oldMap {
  2. newMap[key] = value
  3. }

for 和 for range 有什么区别?

1、使用场景:

1)for可以遍历array、slice、key为整形递增的map、string

2)for range 可以完成for所有事情,却能做for不能做的事情,包括遍历key为string类型的map、遍历channel

6、循环控制goto、break、&hellip;

  1. GotoBreakContinue
  2. 1、三个语句都可以配合标签(label)使用
  3. 2、标签名区分大小写,定义后若不是用会造成编译错误
  4. 3continuebreak配合标签(label)可以用于多层循环跳出
  5. 4goto调整执行位置,与continuebreak配合标签(label)的结果并不相同

以上就是Go流程控制代码怎么写的详细内容,更多关于Go流程控制代码怎么写的资料请关注九品源码其它相关文章!