三、Go语言控制语句
@Author:Runsen
Go的语法很简单,其实也有一部分就是因为Go语言中控制语句关键字很少,但却完全满足了我们的需求,下面我列举了Go语言中常用的控制语言,对每一个控制语句都进行代码展示与解释。
文章目录
- if 语句
- switch语句
- for循环
- goto语句
if 语句
依据条件是否满足确定执行哪个分支。
语法:
if 条件 1 {分支 1
} else if 条件 2 {分支 2
} else if 条件 ... {分支 ...
} else {分支 else
}
注意:Go语言规定与if匹配的左括号{
必须与if
和表达式放在同一行,{
放在其他位置会触发编译错误。同理,与else匹配的{
也必须与else写在同一行,else也必须与上一个if
或else if
右边的大括号在同一行。
package mainimport ("fmt"
)func main() {age := 20if age > 18 {fmt.Println("你已经是成年人了")} else if age > 6 {fmt.Println("你还是一个小屁孩")} else {fmt.Println("你还是一个小娃娃")}
}你已经是成年人了
switch语句
有时候我们有大量if…else if…else语句,这样写不美观,也不够直观。对于这类需求,Go语言用switch 语句对其进行条件判断,其基本语法如下:
switch 判断变量 {case 表达式1:语句1case 表达式2:语句2......default:默认语句
}
例子:我们根据一个人的年龄去判断属于哪一年龄段。
package mainimport "fmt"func main() {age := 18switch age {case 60:fmt.Print("老人")case 30:fmt.Print("中年")case 18:fmt.Print("青年")case 6:fmt.Print("少年")default:fmt.Print("你是一个人才")}
}青年
注意:Go语言规定每个switch只能有一个default分支,还有case没有数值大于小于的比较
这里需要补充一个:fallthrough。fallthrough可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。如下:
package mainimport "fmt"func main() {s := "a"switch {case s == "a":fmt.Println("a")fallthroughcase s == "b":fmt.Println("b")case s == "c":fmt.Println("c")default:fmt.Println("...")}
}
这样在执行s == "a"
的时候会同时执行s == "b"
。
for循环
在Go语言不再使用 do 或 while 循环,只有一种循环语句,那就是for循环 ,其基本格式如下:
for 初始语句;条件表达式;结束语句{循环体
}
下面举一个例子,比如输出0到9。
package mainimport "fmt"func main() {for i := 0; i < 10; i++ {fmt.Println(i)}
}0
1
2
3
4
5
6
7
8
9
如果for后面不跟任何语句,则是无限循环,如下所示。
package mainimport "fmt"func main() {for {fmt.Println(我们学习Go")}
}
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
下面举一个例子,遍历字符串,如下所示。
package mainimport "fmt"func main() {s := "Hello"for i, v := range s {fmt.Printf("%d - %c \n", i, v)}
}0 - H
1 - e
2 - l
3 - l
4 - o
如果我们不需要索引值,我们可以用匿名变量去接收,如下所示。
package mainimport "fmt"func main() {s := "Hello"for _, v := range s {fmt.Printf("%c \n", v)}
}H
e
l
l
o
还有两个关键词,跳出循环有break和continue,break和continue和其他编程语言相同。
break:跳出当前循环
package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i == 5 {break}fmt.Println(i)}
}0
1
2
3
4
continue:跳出本次循环
package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i == 5 {continue}fmt.Println(i)}
}0
1
2
3
4
6
7
8
9
goto语句
在双层嵌套的for循环,经常见到goto语句。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。
转到goto语句的语法如下:
goto label;
..
label: statement;
在这里,label可以是除去关键字任何纯文本,它可以在任何地方设置在Go程序的上方或下方,以使用goto语句。
这边举一个例子,用 goto 的方式来实现一个打印 10到19的循环。
package mainimport "fmt"func main() {var a int = 10LOOP: for a < 20 {if a == 15 {a = a + 1goto LOOP}fmt.Printf("value of a: %d\n", a)a++ }
}value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19
三、Go语言控制语句相关推荐
- 保留两位小数有右对齐c语言,[理学]3 C语言 第三章顺序控制语句.ppt
[理学]3 C语言 第三章顺序控制语句 1.C语句分五类: 控制语句.函数语句.表达式语句.空语句.复合语句. 其中控制语句又有9条. 2.结构化程序的三种基本结构: 顺序结构.分支结构.循环结构 3 ...
- 计算机网络技术及应用 课程 英语,计算机网络应用—现代英语课堂中的第三种语言...
陶 兰 摘 要 众所周知,传统的课堂教学包括了教师教学语言及教师体态语言.前者指教师为了灌输知识用自己的声音所进行的表达和与学生的交流;后者指教师为了达到教学目的而有意做出的表情.动作和姿势的总和.随 ...
- ABAP, Java和JavaScript三种语言的比较
写这个系列的初衷是SAP Chengdu office有越来越多的应届毕业生加入,这些新同事通过在大学的专业学习,具备了Java和JavaScript背景,但是进入SAP之后大家觉得ABAP没有Jav ...
- c语言中三种常用的循环控制结构是,三C语言的基本控制结构.ppt
三C语言的基本控制结构 第三章 C语言的基本控制结构 问题 一元二次方程根求解算法描述 3.1 程序的三种控制结构 ⒊循环结构Repetition ⒋复合语句 CompoundStatement 3. ...
- 会java c php三种语言_php java net三种语言的区别
php java net是现在比较流的三种编程语言. 如果学的时候,该学哪种语言呢? PHP:PHP产生与1994年,其语法混合了C.Java.Perl 和他自创的一些编程语法:PHP是嵌入在HTML ...
- java循环控制语句,简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别。...
简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别. 答:for语句,构建确定循环次数的循环结构 while语句,通常构建不确定循环次数的循环结构 do-while语句,通常构建不确定循 ...
- 第三章 流程控制语句
第三章 流程控制语句 简介 Python代码在执行时是按照自上向下顺序执行的. 通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次 流程控制语句分成两大类:条件判断语句,循环语句 ...
- 西门子哪款plc支持c语言,西门子PLC三种语言的区别
原标题:西门子PLC三种语言的区别 PLC是机器人重要的一部分,下面小编就为大家介绍一些3种语言的区别,帮助大家学习. 一.梯形图 梯形图作为简单易读通俗易懂基本属于新人学习PLC的首选,而且调试的时 ...
- Spark - OnYARN 模式搭建,并使用 Scala、Java、Python 三种语言测试
一.SparkOnYarn搭建 安装前需要提前安装好 hadoop 环境,关于 HDFS 和 Yarn 集群的搭建可以参考下面我的博客: https://blog.csdn.net/qq_436929 ...
- 华为商城抢购助手_华为推海外版语音助手Celia:六国首发支持三种语言
3月26日晚间消息,华为P40系列今日在海外发布,全新的EMUI 10.1也随之亮相.此次华为推出了海外版语音助手Celia,随华为P40系列在英国.西班牙.法国.智利.墨西哥.哥伦比亚六国首发上线. ...
最新文章
- 谈谈最近独立做项目的一些事情,一些小经验,分享之!
- Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)
- android 怎么初始化下拉框_第30讲:“二师兄”的成长历程之二,类属性的初始化...
- redis 系列26 Cluster高可用 (1)
- 20000赫兹的声音试听下载_好听又不贵,DLC球顶双面镀铍动圈:七赫兹i99
- C# winform对话框用法大全收藏
- install opencv from source
- android 关闭软键盘_「安卓之父」创立的 Essential 公司宣布关闭
- checkbox:全选、全不选、单选(慕课网题目)
- 系统可行性研究报告模板
- eLife:一个开源、高性能的自动睡眠分期工具
- linux git difftool,git difftool 详解
- Java中类与对象的定义与使用
- pmp知识点(8)-项目质量管理
- 神经网络——单层感知器
- 徒步西藏旅游攻略之岗仁波齐神山之行
- C语言中变量的作用域和生存期的区别
- Mac系统升级后,按大小写键没反应了,切换大小写的灯不亮了
- TokenGazer:DeFi领域发展良好,量化模型显示MKR处于市值偏低区间
- 【图像隐写】DWT+DCT+PBFO改进图像水印隐藏提取【含GUI Matlab源码 081期】
热门文章
- Qt / QWidget、QFrame 区别
- 到底什么是AI0T?现在不少头部企业都在打造AIOT概念,今天我们就梳理一下AIOT产业都包含了哪些,启明云端在AIOT中,能提供哪些解决方案?
- java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
- 电脑管家离线安装包_二号线、南延线TVM病毒客户端离线处理方法
- 重磅发布 | 2021 年 OpenAtom XuperChain 开源技术路径
- 统计次数c语言,C 语言统计关键字出现次数
- Linux进入单用户模式(passwd root修改密码)
- 《大话操作系统——做坚实的project实践派》(6)
- POJ 2301 Beat the Spread!
- 数据库查找出list数据,进行处理