当前位置:网站首页>7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇
7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇
2022-07-31 10:27:00 【梦想橡皮擦】
本篇博客重点内容
来到 Go 语言学习的第 3 篇博客,本篇将涉及两种 Go 语句,其一是分支,即条件判断,其二是循环。
条件判断语句又细分为 if 语句,if else 语句,if 嵌套语句,switch 语句,select 语句,对于以往的 Python 学习者,
上述内容只有 switch 和 select 语句需要反复学习一下。
select 语句类似于 switch 语句,只是 select 会随机选择一个可运行的 case 执行。
由于有其它语言的经验,这里重点看的就是语法结构。
if 语句
语法结构如下所示:
if 布尔表达式{
/* 待执行内容 */
}
带上 else 之后,语法结构如下所示:
if 布尔表达式{
/* TODO */
}
else{
/* TODO */
}
if 嵌套相关知识和其它语言一致,可以直接学习。
switch 语句
该语句在 Python 中不存在,但其它语言基本都有,语法结构如下所示:
switch vari{
case vari1:
//TODO
case vari2:
//TODO
}
switch 的 case 子句,默认带 break 语句,所以匹配到其中任意一个分支,都会终止语句,进入 switch 代码后继续运行。
switch 语句还可以用 type-switch 来判断变量类型,语法结构如下所示:
switch var1.(type){
case type:
// TODO
case type:
// TODO
}
在 Go 语言中,case 是一个独立的代码块,而且执行完毕不会像 C 语言一样继续执行下一个 case,如果希望实现,可以使用 fallthrough 关键字实现,不过以橡皮擦的经验看,这个知识点不用刻意掌握,毕竟 switch 设计的初衷,就是不希望出现跨 case 运行的情况出现。
select 语句
select 与 switch 语句类似,它会随机执行一个可运行的 case,如果没有 case,就会阻塞,这里有一个新的概念,叫做 Go Channel,这部分我们预留一下,后续学到在细聊。
Go 循环
循环语句看了一下,并无太多特殊点,而且 Go 只支持 for 循环,知识点减少了一些,不过 Go 循环的语法与 Python 有一些差异,例如下述 Demo。
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
抽象一下语法结构,得到下述格式:
for init;condition;post {
}
其中各参数说明如下:
init:赋值表达式,给控制变量赋值;condition:关系表达式或逻辑表达式,控制条件;post:也是赋值表达式,对init进行增减控制。
其中 init 和 post 为可选参数,可以省略,即下述代码正常运行。
package main
import "fmt"
func main() {
sum := 1
for ;sum <= 20; {
sum += sum
}
fmt.Println(sum)
}
上述 for 语句后面的分号 ; 可以省略,即下述代码。
for sum <= 20{
sum += sum
}
这里与其它语言不同的是 for 后面的内容不需要括号,如果希望实现类似 while 的无限循环,直接省略 for 后面的内容即可。
package main
func main() {
sum := 0
for {
sum++
if sum > 100 {
break
}
}
}
这里必须要注意如下内容,其中涉及了 Go 的语法格式。
- for 后面的大括号,必须与 for 在同一行;
- Go 语言中也支持 continue 和 break 控制循环,而且有一个更高级的 break 用法,可以终止指定循环(即终止标号 label 所在的循环);
package main
import "fmt"
func main() {
// 不使用标记 label
fmt.Println("使用 break 标记")
for i := 1; i <= 10; i++ {
fmt.Printf("i: %d\n", i)
}
// 使用标记 label
fmt.Println("不使用 break 标记")
re:
for i := 1; i <= 10; i++ {
fmt.Printf("i: %d\n", i)
if i > 5 {
break re
}
}
}
continue 标记与 break 用法一致,只是其含义表示跳出当前循环,进入下一循环。
边栏推荐
- Gradle series - Groovy overview, basic use (based on Groovy document 4.0.4) day2-1
- 解决报错TypeError:unsupported operand type(s) for +: ‘NoneType‘ and ‘str‘
- 【LeetCode】242. 有效的字母异位词
- 单点登录的三种方式
- csdn文件导出为pdf
- WEB核心【记录网站登录人数,记录用户名案例】Cookie技术实现
- GZIPInputStream 类源码分析
- NowCoderTOP23-27 Binary tree traversal - continuous update ing
- SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)
- Simple understanding of GCD
猜你喜欢

IBM SPSS Statistics 28软件安装包下载及安装教程

Windows系统Mysql8版本的安装教程

Gradle系列——Groovy概述,基础使用(基于Groovy文档4.0.4)day2-1

Data Middle Office Construction (6): Data System Construction

Web系统常见安全漏洞介绍及解决方案-CSRF攻击

Web系统常见安全漏洞介绍及解决方案-XSS攻击

Mybaits Frequently Asked Questions Explained

Android安全专题(三)JNI混淆

Insertion and deletion of doubly linked list

细讲DDD领域驱动设计
随机推荐
模块八
细讲DDD领域驱动设计
LeetCode二叉树系列——101.对称二叉树
Module eight
Mybaits Frequently Asked Questions Explained
1161. 最大层内元素和 (二叉树的层序遍历)
Dart Log工具类
Build finished with errors/Executable Not Found
csdn file export to pdf
【LeetCode】203.移除链表元素
新人学习小熊派华为iot介绍
DC-7-vulnhub
Insertion and deletion of doubly linked list
IBM SPSS Statistics 28软件安装包下载及安装教程
【LeetCode】Day108-和为 K 的子数组
乐观锁和悲观锁
SQL存储过程详解
逆置问题--重点
KVM虚拟化作业
单点登录的三种方式