GO语言的进阶之路-流程控制
GO语言的进阶之路-流程控制
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑。流程控制语句有三个作用,第一,选择(根据条件跳转到不同的执行序列); 第二,循环(根据条件反复执行某个序列)第三,跳转(据条件返回到某执行序列)。
一.流程控制语句类型
Go语言支持如下的几种流程控制语句:
1>.条件语句:关键字为if、else和else if。
2>.选择语句:关键字为switch、case和select。
3>.循环语句:关键字为for和range。
4>.跳转语句:关键字为goto。
在具体的应用场景中,为了满足更丰富的控制需求,Go语言还添加了如下关键字: break 、 continue 和 fallthrough 。
二.各个流程控制案例展示
1.条件语句
a>.单分支结构
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 package main 8 9 import "fmt" 10 11 func main() { 12 Name := "yinzhengjie" 13 if Name == "yinzhengjie" { 14 fmt.Println("His Chinese name is 尹正杰") 15 }else { 16 fmt.Println("He is not yinzhengjie!") 17 } 18 } 19 20 21 22 23 #以上代码执行结果如下: 24 His Chinese name is 尹正杰
b>.多分支结构
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 package main 8 9 import "fmt" 10 11 func AcademicRecords(x int64) { 12 if 100>=x && x>90 { //可以定义一个条件。 13 fmt.Println("优秀!") 14 }else if 90>=x && x>80 { //可以定义另一个条件。 15 fmt.Println("较优") 16 }else if 80>=x && x>70{ //也可以在定义一个条件,它不局限于定义两个条件。 17 fmt.Println("良好") 18 }else if 70>=x && x>60 { 19 fmt.Println("一般") 20 }else { 21 fmt.Println("你娃娃得努力啦!") 22 } 23 } 24 25 func main() { 26 AcademicRecords(93) //调用该函数 27 AcademicRecords(82) 28 AcademicRecords(79) 29 AcademicRecords(65) 30 AcademicRecords(32) 31 } 32 33 34 35 #以上代码执行结果如下: 36 优秀! 37 较优 38 良好 39 一般 40 你娃娃得努力啦!
2.选择语句
a>.switch姿势一
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import "fmt" 11 12 func MyPrint(n int) { 13 switch n { //有没有发现他和shell的case语句很像 14 case 0: 15 fmt.Printf("这是第【%d】种情况,它输入的值为:%v\n",n,"first") 16 case 1: 17 fmt.Printf("这是第【%d】种情况,它输入的值为:%v\n",n,"Second") 18 case 2: 19 fallthrough //表示跳过当前的case,直接执行下一个case。 20 case 3: 21 fmt.Printf("这是第【%d】种情况,它输入的值为:%v\n",n,"fourth") 22 case 4, 5, 6: 23 fmt.Printf("这是第【%d】种情况,它输入的值为:%v\n",n,"Fifth to seventh") 24 default: 25 fmt.Printf("这是第【%d】种情况,它输入的值为:%v\n",n,"默认情况") 26 } 27 } 28 29 func main() { 30 for i:=0;i<10 ;i++ { 31 MyPrint(i) //接下来我们就需要去调用问你定义的函数啦。 32 } 33 } 34 35 36 37 #以上代码执行结果如下: 38 这是第【0】种情况,它输入的值为:first 39 这是第【1】种情况,它输入的值为:Second 40 这是第【2】种情况,它输入的值为:fourth 41 这是第【3】种情况,它输入的值为:fourth 42 这是第【4】种情况,它输入的值为:Fifth to seventh 43 这是第【5】种情况,它输入的值为:Fifth to seventh 44 这是第【6】种情况,它输入的值为:Fifth to seventh 45 这是第【7】种情况,它输入的值为:默认情况 46 这是第【8】种情况,它输入的值为:默认情况 47 这是第【9】种情况,它输入的值为:默认情况
b>.switch姿势二
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import "fmt" 11 12 func AcademicRecords(n int) { 13 switch { //有没有发现他和shell的case语句很像 14 case 100>=n && n > 90: 15 fmt.Printf("你当前的分数是:【%d】,获得的评价是【%v】\n",n,"优秀") 16 case 90>=n && n>80 : 17 fmt.Printf("你当前的分数是:【%d】,获得的评价是【%v】\n",n,"良好") 18 case 80>=n && n>70: 19 fallthrough //表示跳过当前的case,直接执行下一个case。 20 case 70>=n && n>60: 21 fmt.Printf("你当前的分数是:【%d】,获得的评价是【%v】\n",n,"一般") 22 default: 23 fmt.Printf("你当前的分数是:【%d】,获得的评价是【%v】\n",n,"你娃娃得努力啦!") 24 } 25 } 26 27 func main() { 28 for i:=45;i<100 ;i=i+10 { //为了看到实验效果,我这里定义的步长为10,一会我们会说到这个函数。 29 AcademicRecords(i) 30 } 31 } 32 33 34 35 36 #以上代码执行结果如下: 37 你当前的分数是:【45】,获得的评价是【你娃娃得努力啦!】 38 你当前的分数是:【55】,获得的评价是【你娃娃得努力啦!】 39 你当前的分数是:【65】,获得的评价是【一般】 40 你当前的分数是:【75】,获得的评价是【一般】 41 你当前的分数是:【85】,获得的评价是【良好】 42 你当前的分数是:【95】,获得的评价是【优秀】
c>.channel的select语句
其实select的语法格式和switch语法格式类似,只不过select是专用于channel的流程控制语句,属于特殊的流程控制语句,此处我们了解即可,感兴趣的小伙伴可以看我关于channel的笔记。
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import "fmt" 11 12 func main() { 13 ch1 := make (chan int, 100) //定义名称为ch1的一个channel,其类型为int,其容量为100。 14 ch2 := make (chan string,50) //定义名称为ch2的一个channel,其类型为string,其容量为50。 15 select { 16 case <-ch1: //我们只是定义了一个channel,但是还没有往里面传值,因此,该ch1和下面的ch2都是空的。 17 fmt.Println("ch1 pop one hundred element") 18 case <-ch2: 19 fmt.Println("ch2 pop one hundred element") 20 default: //由于上面两个channel都是空的,因此只会默认走这条语句 21 fmt.Println("default") 22 } 23 } 24 25 26 27 28 #以上代码执行结果如下: 29 default
3.循环语句
在Golang语言中,只存在for循环语句,没有类似Python中的while循环,也没有shell中的until循环等等。
a>.for循环姿势一,普通循环;
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import "fmt" 11 12 func main() { 13 var StartNumber int64 14 for StartNumber = 11;StartNumber < 100 ;StartNumber += 11 { //定义起始的数字是11,结束的条件是小于100,每次循环都得加11. 15 fmt.Println(StartNumber) //强每次循环都打印出来。 16 } 17 } 18 19 20 21 #以上代码执行结果如下: 22 11 23 22 24 33 25 44 26 55 27 66 28 77 29 88 30 99
b>.for循环姿势二,模拟while循环;
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 9 package main 10 11 import "fmt" 12 13 var ( 14 Sum int 15 ) 16 17 func main() { 18 Sum = 1 19 for Sum < 100 { //此处模拟的就是Python中的while循环,它其实是普通循环演变而来的。只不过我们只去啦普通循环的结束条件。 20 fmt.Println(Sum) 21 Sum += Sum 22 } 23 fmt.Println(Sum) 24 } 25 26 27 28 #以上代码执行结果如下: 29 1 30 2 31 4 32 8 33 16 34 32 35 64 36 128
c>.for循环姿势三,数组循环;
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import ( 11 "fmt" 12 ) 13 14 func main() { 15 dict := make(map[string]int) 16 NameList := []string{"尹正杰","饼干","Golang"} 17 IdList := []int{100,200,300} 18 19 for id,name := range NameList{ //基于数组的方式循环。 20 dict[name] = IdList[id] 21 } 22 fmt.Println(dict) 23 24 for k,v :=range dict{ 25 fmt.Println(k,v) 26 } 27 } 28 29 30 31 32 #以上代码执行结果如下: 33 map[饼干:200 Golang:300 尹正杰:100] 34 Golang 300 35 尹正杰 100 36 饼干 200
d>.for循环姿势四,死循环;
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 9 package main 10 11 import ( 12 "bufio" 13 "os" 14 "fmt" 15 ) 16 17 var ( 18 UserInput string 19 line string 20 ) 21 func main() { 22 f := bufio.NewReader(os.Stdin) //读取输入的内容 23 for { //以下的内容就是死循环了,但是可以用continue和break来控制循环。 24 fmt.Print("请输入一些字符串>") 25 line,_ = f.ReadString('\n') //定义一行输入的内容分隔符。 26 if len(line) == 1 { 27 continue //如果用户输入的是一个空行就跳过本次循环,让用户继续输入。 28 } 29 fmt.Sscan(line,&UserInput) //将从系统标准输入读取的内容按行(line)传给变量UserInput。 30 if UserInput == "stop" { 31 fmt.Println("程序已结终止!") 32 break //当用户输入“stop”就跳出当前的for循环,从而使得整个程序结束。 33 } 34 fmt.Printf("您输入的参数是:·\033[31;1m%v\033[0m·\n",UserInput) 35 } 36 } 37 38 39 40 #以上代码执行结果如下: 41 请输入一些字符串>尹正杰 42 您输入的参数是:·尹正杰· 43 请输入一些字符串>ls 44 您输入的参数是:·ls· 45 请输入一些字符串>pwd 46 您输入的参数是:·pwd· 47 请输入一些字符串>stop 48 程序已结终止!
4.跳转语句
1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7 8 package main 9 10 import "fmt" 11 12 func MyEcho() { 13 StartNumber := 0 14 Stop: 15 fmt.Println(StartNumber) 16 StartNumber += 100 17 if StartNumber < 500 { 18 goto Stop //表示当代码执行到这一行时,跳转到关键字“Stop”这行代码上去。这个“Stop”关键字其实你可以随意定义哟! 19 } 20 } 21 22 func main() { 23 MyEcho() 24 } 25 26 27 28 29 30 #以上代码执行结果如下: 31 0 32 100 33 200 34 300 35 400
三.小时牛刀
1.编写九九乘法表
1 package main 2 3 import "fmt" 4 5 func main() { 6 for i := 1; i < 10; i++ { 7 for j := 1; j <= i; j++ { 8 fmt.Printf("%d x %d = %-2d ",i,j,i*j) 9 } 10 fmt.Println() 11 } 12 } 13 14 15 16 17 18 #以上代码执行结果如下: 19 1 x 1 = 1 20 2 x 1 = 2 2 x 2 = 4 21 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 22 4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 23 5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 24 6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 25 7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 26 8 x 1 = 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 27 9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81
转载于:https://www.cnblogs.com/yinzhengjie/p/7712792.html
GO语言的进阶之路-流程控制相关推荐
- Java码农进阶之路~流程控制-循环结构whileforbreak与continue
流程控制 1.顺序结构 2.分支结构---if&switch 3.循环结构---while&for 循环结构 一.while 1.while while(循环条件){ 循环体 } 2. ...
- GO语言的进阶之路-协程和Channel
GO语言的进阶之路-协程和Channel 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 看过我之前几篇博客小伙伴可能对Golang语言的语法上了解的差不多了,但是,如果想要你的代码 ...
- GO语言的进阶之路-Golang高级数据结构定义
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...
- 网络编程+go+java_GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- GO语言的进阶之路-网络安全之proxy
GO语言的进阶之路-网络安全之proxy 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在党的带领下,我们大陆的孩子身心健康还是杠杠的,尤其是像我这种农村孩纸,从来不会像<人 ...
- SHELL/SSH基础知识(入门篇)-包含 shell 脚本语言的基本用法、 shell 脚本语言的基本用法、流程控制、函数 function、其它脚本相关工具、数组 array(欢迎留言交流)
目录 1 shell 脚本语言的基本用法 1.1 shell 脚本注释规范 1.1.1 shell 脚本注释规范 1.1.2 执行(5种) 1.1.3 在远程主机运行本地脚本 1.1.4 检查shel ...
- shell学习之路:流程控制(if)
1.单分支if条件语句 1 if [ 条件判断式 ];then 2 程序 3 fi 4 或者 5 if [ 条件判断式 ] 6 then 7 程序 8 fi 注意事项: 1.if语句使用fi结尾,和一 ...
- R语言小代码7(流程控制练习)
任务:计算等额本金还款和等额本息还款 小张贷款100万购买房子,贷款利率为4.9%(年利率),贷款期限20年. 1)用循环执行语句(for或者while),分别计算等额本金还款和等额本息还款的每月偿还 ...
- 易语言流程控制程序暂停开始继续
易语言并没有直接对流程控制的命令,我们可以采用逻辑变量,时钟的时钟周期是否为0来进行流程的 控制. 一.使用变量控制程序的暂停和继续 .版本 2.程序集 窗口程序集_启动窗口 .程序集变量 是否暂停, ...
最新文章
- Python使用matplotlib保存图像时发生自动裁剪丢了部分标签信息解决方案(plt.savefig保存时丢失了部分标签字符)
- VR/AR技术依然红火:何时迎来爆发点
- uiwebview 加载本地js、css、img,html从网站加载
- c语言程序设计字节,C语言程序设计-数据类型
- skip与direct模式区别 ,他们与CBP的关系
- linux进程cpu时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
- mysql 批量替换 所有表_[收藏]批量替换一个数据库中所有表中所有记录
- 想买基金,在哪个银行开户好呢?
- python高阶_Python高阶学习
- 使用代码辅助生成工具CodeSmith -- 生成NHibernate的映射文件
- C++---常用printf输出格式
- 『深度实战』天池小目标检测大赛·宫颈癌风险智能诊断推荐
- 计算机科学技术的想象作文600,关于科学的想象作文
- K3终极折腾记<一>
- 罗马帝国 Ancient Rome 简易修改器
- java实现找一条转乘次数最少的公交线路?,基于最优换乘次数的城市公交查询算法...
- 计算机网络基础 第二章
- openGL 调用glewInit()失败
- 互联网摸鱼日报(2022-12-22)
- 安装centOS7报未知错误