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 执行是放在一个临时的调用栈中,因此是先入栈后出栈的。
流程图如下:
实操时,处理互斥所时,很常用!
完!
原文出自:小韩说课
微信关注:小韩说课
Go语言中的流程控制的更多相关文章
- Go语言基础之流程控制
Go语言基础之流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”. Go语言中最常用额流程控制有if和for,而switch和goto主要是为了简化代 ...
- Python基础之:Python中的流程控制
目录 简介 while语句 if 语句 for语句 Break Continue pass 简介 流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样 ...
- GO语言学习——Go语言基础之流程控制一
Go语言基础之流程控制 if else(分支结构) package main import "fmt" // if条件判断 func main(){ // age := 19 // ...
- Java中的流程控制(三)
关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号 ...
- Go语言 数据类型,流程控制
Go语言 数据类型,流程控制 人生苦短,Let's Go ! package main // 必须要有一个main包 import "fmt" func main() { fmt. ...
- python中的流程控制
目录 引言 流程控制的分类 分支结构 单if结构 if与else结构 if与elif与else结构 if分支的嵌套 循环结构 while循环 while + break循环 while + conti ...
- 第三章 go语言 程序的流程控制
程序的流程控制主要包括三种不同的结构,分别是顺序结构.选择结构和循环结构. ² 顺序结构最为简单,程序执行时,按照语句的顺序自上而下依次执行. ² 选择结构是根据条件表达式的结果选择执行某些语句. ² ...
- Go语言学习笔记-流程控制(二)
Go语言流程控制 字典类型Map 1.上节遗留:map字典类型 变量声明:var myMap map[string] PersonInfo 其中,myMap是变量名,string是键的类型,Perso ...
- 1.4 Go语言基础之流程控制
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码. ...
随机推荐
- Carbon中文使用手册
Introduction Carbon 继承了PHP的 Datetime 类和JsonSerialiable.所以 Carbon 中没有涉及到的,但在 Datetime 和JsonSerializab ...
- WAKE-WIN10-SOFT-环境
操作系统名称 Microsoft Windows 10 专业版版本 10.0.14393 版本 14393其他操作系统描述 没有资料操作系统制造商 Microsoft Corporation系统名称 ...
- Intellij idea用快捷键自动生成序列化id
ntellij idea用快捷键自动生成序列化id 类继承了Serializable接口之后,使用alt+enter快捷键自动创建序列化id 进入setting→inspections→seriali ...
- 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
上篇讲述了一维FFT的GPU实现(FFT算法实现——基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下. 首先看的肯定是公式: 如上面公式所描述的,2维FFT只需要拆分 ...
- Ettercap结合sslstrip对ssl/https进行攻击
Ettercap是一个非常强大的嗅探欺骗工具:在以往的ettercap的使用过程中,我们大多用来嗅探http,ftp,和一些加密比较简单的邮箱等的密码,对于新型的ssl/https等的加密协议就显得不 ...
- spring的声明式的事物管理和编程事务管理的区别
一.Spring对编程式事务的支持 Spring中的事务分为物理事务和逻辑事务: 物理事务:就是底层数据库提供的事务支持,如JDBC或JTA提供的事务: 逻辑事务:是Spring管理的事务,不同于物理 ...
- 设计模式——责任链(chain of responsibiltiy)
责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象. 每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象.也就 ...
- 【luogu P3946 ことりのおやつ】 题解
题目链接:https://www.luogu.org/problemnew/show/P3946 交好几遍是因为虽然能过一直有提醒..强迫症qwq #include <bits/stdc++.h ...
- STM32的备份寄存器和控制状态寄存器
STM32的备份寄存器和控制状态寄存器 1 备份寄存器用于RTC时钟 RTC时钟可以在掉电以后继续计数,保证时间的延续,但是重新上电以后需要配置,保证之前的计数不会被清除,可以借助备份寄存器实现,备份 ...
- Java 分支结构
Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java 有两种分支结构: if 语句 switch 语句 if 语句 一个 i ...