• 7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇


    本篇博客重点内容

    来到 Go 语言学习的第 3 篇博客,本篇将涉及两种 Go 语句,其一是分支,即条件判断,其二是循环。

    条件判断语句又细分为 if 语句,if else 语句,if 嵌套语句,switch 语句,select 语句,对于以往的 Python 学习者,

    上述内容只有 switch 和 select 语句需要反复学习一下。

    select 语句类似于 switch 语句,只是 select 会随机选择一个可运行的 case 执行。

    由于有其它语言的经验,这里重点看的就是语法结构。

    if 语句

    语法结构如下所示:

    if 布尔表达式{
    	/* 待执行内容 */
    }
    
    • 1
    • 2
    • 3

    带上 else 之后,语法结构如下所示:

    if 布尔表达式{
    	/* TODO */
    }
    else{
    	/* TODO */
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    if 嵌套相关知识和其它语言一致,可以直接学习。

    switch 语句

    该语句在 Python 中不存在,但其它语言基本都有,语法结构如下所示:

    switch vari{
    	case vari1:
    		//TODO
    	case vari2:
    		//TODO
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    switch 的 case 子句,默认带 break 语句,所以匹配到其中任意一个分支,都会终止语句,进入 switch 代码后继续运行。

    switch 语句还可以用 type-switch 来判断变量类型,语法结构如下所示:

    switch var1.(type){
    	case type:
    		// TODO
    	case type:
    		// TODO
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在 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)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    抽象一下语法结构,得到下述格式:

    for init;condition;post { }
    
    • 1

    其中各参数说明如下:

    • init:赋值表达式,给控制变量赋值;
    • condition:关系表达式或逻辑表达式,控制条件;
    • post:也是赋值表达式,对 init 进行增减控制。

    其中 initpost 为可选参数,可以省略,即下述代码正常运行。

    package main
    
    import "fmt"
    
    func main() {
    	sum := 1
    	for ;sum <= 20; {
    		sum += sum
    	}
    	fmt.Println(sum)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    上述 for 语句后面的分号 ; 可以省略,即下述代码。

    for sum <= 20{
    	sum += sum
    }
    
    • 1
    • 2
    • 3

    这里与其它语言不同的是 for 后面的内容不需要括号,如果希望实现类似 while 的无限循环,直接省略 for 后面的内容即可。

    package main
    
    func main() {
    	sum := 0
    	for {
    		sum++
    		if sum > 100 {
    			break
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这里必须要注意如下内容,其中涉及了 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
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    continue 标记与 break 用法一致,只是其含义表示跳出当前循环,进入下一循环。

  • 相关阅读:
    ZJU-199001 第三周练习 2 数字特征值 位运算算法
    探索ClickHouse——使用MaterializedPostgreSQL同步PostgreSQL数据库
    机械转码日记【24】继承
    1个程序员单干之:怎样给我的升讯威在线客服系统编写堪比 MSDN 的用户手册
    QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)
    音视频从入门到精通——MediaMuxer API 简介
    WebGL笔记:WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:js控制绘制点位
    【好书推荐】学习软件工程的必经之路 | 《人月神话》
    如何读取maven依赖的jar包中的代码?
    【列表添加元素】详解python中列表添加元素的几种方式(+、append()、extend())
  • 原文地址:https://blog.csdn.net/hihell/article/details/125988561