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

举报
梦想橡皮擦 发表于 2022/08/04 14:09:41 2022/08/04
【摘要】 本篇博客重点内容来到 Go 语言学习的第 3 篇博客,本篇将涉及两种 Go 语句,其一是分支,即条件判断,其二是循环。条件判断语句又细分为 if 语句,if else 语句,if 嵌套语句,switch 语句,select 语句,对于以往的 Python 学习者,上述内容只有 switch 和 select 语句需要反复学习一下。select 语句类似于 switch 语句,只是 sele...

本篇博客重点内容

来到 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 进行增减控制。

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

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 用法一致,只是其含义表示跳出当前循环,进入下一循环。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。