Go语言中的流程控制

1 概述

Go语言提供了条件分支 if,状态分支 switch,循环 for,跳转 goto,延迟执行 defer,这些流程控制语句。分别作说明如下:

2 条件分支 if

依据条件是否满足确定执行哪个分支。
语法:

if 条件 1 {
  分支 1
} else if 条件 2 {
  分支 2
} else if 条件 ... {
  分支 ...
} else {
  分支 else
}

流程图:

Go是强类型,要求条件表达式严格返回布尔型数据!

3 状态分支 switch

3.1 基础

状态分支,依据特定的状态值进行分支判断。
语法:

switch 分支测试表达式 {
case 状态1:
    分支1
case 状态2:
    分支2
case 状态...:
    分支...
default:
  分支 default
} 

流程如下:

3.2 fallthrough,向下穿越

在其他语法(非Go,C,PHP)中,switch 有一个特定的现象,就是向下穿越,指的是一旦一个分支 case 满足,则后续分支代码都会被执行。而Go语言中,默认分支执行完毕,switch 执行完毕。使用 fallthrough 语法,可以达到穿越下一个 case 分支的目的。
fallthrough 需要出现在分支语句块的最后一句!
语法:

switch 分支测试表达式 {
case 状态1:
    分支1
    fallthrough
case 状态2:
    分支2
    fallthrough
default:
  分支 default
} 

流程如下:

3.3 条件型 switch

示例代码,逻辑与 if-else-if 一致:

score := 89
switch {
case score >= 90:
  fmt.Println("优秀,不错")
case score >= 80:
  fmt.Println("还行吧")
default:
  fmt.Println("呵呵")
}

个人感觉失去了 switch 分支的意义哈!

4 循环for

4.1 基本

语法格式:

for 初始化语句; 条件语句; 条件变化语句 {
  循环体
}

// 输出1-10
for i := 1; i <= 10; i++ {
 fmt.Println(i)
}

流程如下:

4.2 省略语句

Go中允许省略三个语句中的任意,就是可以形成如下的语法:
仅存在条件语句,类似其他语言的 while 结构!

for 条件语句 {
  循环体
}

无限循环结构,死循环

for {
  循环体
}

其他结构,三个语句可以任意省略,不再列举:

for ; 条件语句; 条件变化语句 {
  循环体
}
for 初始化语句; 条件语句; {
  循环体
}

4.3 break

终止整个循环执行。
流程图如下:

4.4 continue

终止本次循环体的继续执行,进行循环条件变化。
流程如下:

4.5 嵌套循环

语法:

for {
  for {

  }
}

在使用 break,continue 时,若需要终止外层循环 for,需要配合语句标签使用,演示如下:

userLabel:
for {
  for {
    break userLabel
    或者
    continue userLabel
  }
}

额外注意,switch 在语言中,被视为执行一次的循环结构,因此 switch 中若要终止外层循环,需要使用标签语法,不能直接 break、continue,演示如下:

userLabel:
for {
  swtich variable {
    case "exit"
      break userLabel
      或者
      continue userLabel
  }
}

5 goto

配合标签完成无条件跳转。演示如下:

if error {
  goto doError
}

// 其他业务逻辑代码略

doError:
fmt.Println(errorInfo)

6 延迟执行defer

defer 语句会将其后语句进行延迟处理。在 defer 所属函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。演示如下:

 func main() {
    fmt.Println("before defer")
    defer fmt.Println("defer A")
    defer fmt.Println("defer B")
    defer fmt.Println("defer C")
    fmt.Println("after defer")
}
以上代码的执行结果:
before defer
after defer
defer C
defer B
defer A

defer 执行是放在一个临时的调用栈中,因此是先入栈后出栈的。
流程图如下:

实操时,处理互斥所时,很常用!

完!
原文出自:小韩说课
微信关注:小韩说课

原文地址:http://blog.51cto.com/2980679/2309821

时间: 2024-08-30 03:40:58

Go语言中的流程控制的相关文章

PHP中的流程控制

PHP中的流程控制: 任何PHP脚本都是由一系列的语句构成.一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句).语句通常以分号结束.此外还可以用花括号将一组语句封装成一个语句组.语句本省可以当作是一行语句. if语句 if结构是很多语言包括php在内最重要的特性之一,他允许按照条件执行代码片段.php的if结构和C语言相似: <?phpif($a > $b) echo"a is bigger than b"; ?>

swift中的流程控制

[转自]http://www.cnblogs.com/wendingding/p/3885108.html 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这些语句后面一定要跟上大括号{},在C语言中不是必须的 说明:跟C语言对比,用法基本一样的有:for.while.do-while.if 因此,只需要关注for-in和switch即可 二.for-in结构 简单使用: for-in和

2.6-Java语言基础(程序流程控制)

判断结构 选择结构 循环结构 2.6.1  判断结构 if语句 三种格式: 1.  if(条件表达式) { 执行语句: } 2.  if(条件表达式) { 执行语句: } else { 执行语句: } 3. if(条件表达式) { 执行语句: } else if (条件表达式) { 执行语句: } -- else { 执行语句: } if语句特点: a,每一种格式都是单条语句. b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现.好处是:可以写在其他表达式中. c,条件表达式无论写成什

第04章 程序设计中的流程控制

/**第四章 程序设计中的流程控制 @选择语句 形式一:if(条件表达式) 单条语句; 形式二:if(条件表达式){ 语句体;} 形式三:if(条件表达式){ 语句体;}else{ 语句体;} 形式四:if(条件表达式){ 语句体;}else if{ 语句体;} 形式五:if(条件表达式){ 语句体;}else if{ 语句体;}else{ 语句体;}=========================================================================

Java中的流程控制(三)

关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号中的程序段至少要被执行一次. do{ 执行语句}while(条件表达式语句); 例子: int x=1;do{System.out.println("x="+x);x++}while(x<3); 程序打印结果如下: x=1x=2 注:do while不管如何都是至少执行一次 5.fo

java中的流程控制

流程控制 顺序执行流程 条件分支流程 if(布尔表达式) {} if(布尔表达式) {} else{} if(表达式1){} else if(表达式2){} else if ... else{} switch(int型表达式或变量) // byte short int char string(1.7之后) { case 值1: case 值2: case 值3: ... default: } break:跳出switch结构 从JDK7.0开始,switch表达式允许采用String 循环流程

C语言中输入输出格式控制

1.C语言中,非零值为真,真用1表示:零值为假,假用0表示. 2.转义字符参考: \a 蜂鸣,响铃 \b 回退:向后退一格 \f 换页 \n 换行 \r 回车,光标到本行行首 \t 水平制表 \v 垂直制表 \\ 反斜杠 \' 单引号 \" 双引号 \? 问号 \ddd 三位八进制 \0 空字符(NULL),什么都不做 \xhh 二位十六进制 说明: 1)\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作. 2),\n其实应该叫回车换行.换行只是换一行,不改变光标的横坐标:回

Python学习笔记之语言基础与流程控制

Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. Python的特点 Python 优点 1.简单.优雅.明确 2.强大的模块第三方库 3.易移植 4.纯面向对象语言 5.可扩展性良好(c\java\c#...) Python缺点 1.代码不能加密 2.执行速度慢 Python能做什么 1.软件开发 1.游戏后台.搜索.图形界面 2.

java编程入门6 java语言基础与流程控制

语言基础 基本数据类型 1.整数类型 1)不能以0作为十进制数的开头(0除外) 2)八进制必须以0开头 3)十六进制必须以0X或0x开头 4)整型数据类型根据它所占内存大小的不同,可分为byte.short.int和long4中类型 数据类型 内存空间(8位比特位等于1字节) 取值范围 byte 8位 -2^7~2^7-1 short 16位 -2^15~2^15-1 int 32位 -2^31~2^31-1 long 64位 -2^63~2^63-1 5)若赋给的值大于int型的最大值或小于i