当前位置:网站首页>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
用法一致,只是其含义表示跳出当前循环,进入下一循环。
边栏推荐
猜你喜欢
乐观锁和悲观锁
Data Middle Office Construction (6): Data System Construction
Emotional crisis, my friend's online dating girlfriend wants to break up with him, ask me what to do
Android安全专题(三)JNI混淆
sql力扣刷题八
开放麒麟 openKylin 自动化开发者平台正式发布
Make your own dataset in FCN and train it
Web系统常见安全漏洞介绍及解决方案-XSS攻击
NowCoderTOP17-22 Binary search/sort - continuous update ing
Gradle系列——Groovy概述,基础使用(基于Groovy文档4.0.4)day2-1
随机推荐
sql中 exists的用法
A Method for Ensuring Data Consistency of Multi-Party Subsystems
Redis集群-哨兵模式原理(Sentinel)
NowCoderTOP17-22 Binary search/sort - continuous update ing
SQL学习笔记——REGEXP运算符
NowCoderTOP28-34二叉树——持续更新ing
Chapter Six
Chapter VII
How SQL intercepts specified characters from strings (three functions of LEFT, MID, RIGHT)
学习笔记——七周成为数据分析师《第二周:业务》:业务分析框架
Redis缓存面临的缓存击穿问题
【LeetCode】242. 有效的字母异位词
Come n times with the sword--05. Replace spaces
初识二叉搜索树
Redis缓存面临的缓存雪崩问题
Rich text editor Tinymce
Redis Cluster - Sentinel Mode Principle (Sentinel)
nodeJs--querystring模块
darknet 源码阅读笔记-01-activation_kernels.cu
Business-(Course-Chapter-Subsection) + Course Publishing Some Business Ideas