一、程序的流程结构

程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。

顺序结构:从上向下,逐行执行。

选择结构:条件满足,某些代码才会执行。0-1次

分支语句:if,switch,select

循环结构:条件满足,某些代码会被反复的执行多次。0-N次

循环语句:for

二、条件语句

2.1 if 语句

语法格式:

  1. if 布尔表达式 {
  2. /* 在布尔表达式为 true 时执行 */
  3. }
  4. if 布尔表达式 {
  5. /* 在布尔表达式为 true 时执行 */
  6. } else {
  7. /* 在布尔表达式为 false 时执行 */
  8. }
  9. if 布尔表达式1 {
  10. /* 在布尔表达式1为 true 时执行 */
  11. } else if 布尔表达式2{
  12. /* 在布尔表达式1为 false ,布尔表达式2为true时执行 */
  13. } else{
  14. /* 在上面两个布尔表达式都为false时,执行*/
  15. }

示例代码:

  1. package main

  2. import "fmt"

  3. func main() {
  4. /* 定义局部变量 */
  5. var a int = 10
  6.  
  7. /* 使用 if 语句判断布尔表达式 */
  8. if a < 20 {
  9. /* 如果条件为 true 则执行以下语句 */
  10. fmt.Printf("a 小于 20\n" )
  11. }
  12. fmt.Printf("a 的值为 : %d\n", a)
  13. }

2.2 if 变体

如果其中包含一个可选的语句组件(在评估条件之前执行),则还有一个变体。它的语法是

  1. if statement; condition {
  2. }

  3. if condition{
  4.  
  5. }

示例代码:

  1. package main

  2. import (
  3. "fmt"
  4. )

  5. func main() {
  6. if num := 10; num % 2 == 0 { //checks if number is even
  7. fmt.Println(num,"is even")
  8. } else {
  9. fmt.Println(num,"is odd")
  10. }
  11. }

需要注意的是,num的定义在if里,那么只能够在该if..else语句块中使用,否则编译器会报错的。

2.3 switch语句:“开关”

switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break。

而如果switch没有表达式,它会匹配true

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。 您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

  1. switch var1 {
  2. case val1:
  3. ...
  4. case val2:
  5. ...
  6. default:
  7. ...
  8. }

示例代码:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. /* 定义局部变量 */
  7. var grade string = "B"
  8. var marks int = 90
  9.  
  10. switch marks {
  11. case 90:
  12. grade = "A"
  13. case 80:
  14. grade = "B"
  15. case 50, 60, 70:
  16. grade = "C" //case 后可以由多个数值
  17. default:
  18. grade = "D"
  19. }
  20.  
  21. switch {
  22. case grade == "A":
  23. fmt.Printf("优秀!\n")
  24. case grade == "B", grade == "C":
  25. fmt.Printf("良好\n")
  26. case grade == "D":
  27. fmt.Printf("及格\n")
  28. case grade == "F":
  29. fmt.Printf("不及格\n")
  30. default:
  31. fmt.Printf("差\n");
  32. }
  33. fmt.Printf("你的等级是 %s\n", grade);
  34. }

2.4 fallthrough

如需贯通后续的case,就添加fallthrough

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. /*
  7. switch中的break和fallthrough语句
  8. break:可以使用在switch中,也可以使用在for循环中
  9. 强制结束case语句,从而结束switch分支
  10.  
  11. fallthrough:用于穿透switch
  12. 当switch中某个case匹配成功之后,就执行该case语句
  13. 如果遇到fallthrough,那么后面紧邻的case,无需匹配, 执行穿透执行。
  14.  
  15. fallthrough应该位于某个case的最后一行
  16. */
  17. n := 2
  18. switch n {
  19. case 1:
  20. fmt.Println("我是熊大")
  21. fmt.Println("我是熊大")
  22. fmt.Println("我是熊大")
  23. case 2:
  24. fmt.Println("我是熊二")
  25. fmt.Println("我是熊二")
  26. break //用于强制结束case,意味着switch被强制结束
  27. fmt.Println("我是熊二")
  28. case 3:
  29. fmt.Println("我是光头强")
  30. fmt.Println("我是光头强")
  31. fmt.Println("我是光头强")
  32. }
  33.  
  34. fmt.Println("-----------------")
  35. m := 2
  36. switch m {
  37. case 1:
  38. fmt.Println("第一季度。。")
  39. case 2:
  40. fmt.Println("第二季度。。")
  41. fmt.Println("...")
  42. fallthrough
  43. case 3:
  44. fmt.Println("第三季度。。")
  45. fallthrough
  46. case 4:
  47. fmt.Println("第四季度。。")
  48.  
  49. }
  50. fmt.Println("main...over...")
  51. }

case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。

示例代码:

  1. package main

  2. import (
  3. "fmt"
  4. )

  5. func main() {
  6. num := 75
  7. switch { // expression is omitted
  8. case num >= 0 && num <= 50:
  9. fmt.Println("num is greater than 0 and less than 50")
  10. case num >= 51 && num <= 100:
  11. fmt.Println("num is greater than 51 and less than 100")
  12. case num >= 101:
  13. fmt.Println("num is greater than 100")
  14. }

  15. }

switch的注意事项

  1. case后的常量值不能重复

  2. case后可以有多个常量值

  3. fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。

2.5 Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

  1. switch x.(type){
  2. case type:
  3. statement(s);
  4. case type:
  5. statement(s);
  6. /* 你可以定义任意个数的case */
  7. default: /* 可选 */
  8. statement(s);
  9. }
  1. package main

  2. import "fmt"

  3. func main() {
  4. var x interface{}
  5.  
  6. switch i := x.(type) {
  7. case nil:
  8. fmt.Printf(" x 的类型 :%T",i)
  9. case int:
  10. fmt.Printf("x 是 int 型")
  11. case float64:
  12. fmt.Printf("x 是 float64 型")
  13. case func(int) float64:
  14. fmt.Printf("x 是 func(int) 型")
  15. case bool, string:
  16. fmt.Printf("x 是 bool 或 string 型" )
  17. default:
  18. fmt.Printf("未知型")
  19. }
  20. }

运行结果:

  1. x 的类型 :<nil>

  

Go流程结构(if)的更多相关文章

  1. 【粗糙版】javascript的变量、数据类型、运算符、流程结构

    本文内容: javascript的变量 javascript的数据类型 javascript的运算符 javascript的流程结构 首发日期:2018-05-09 javascript的变量 创建变 ...

  2. MySQL学习之流程结构

    流程结构 流程结构:代码的执行顺序. if分支 根据要求选择合适的执行部分. 基本语法 if在MySQL中有两种基本用法 1.用在select查询当中,当作一种条件来进行判断. 基本语法:if(条件, ...

  3. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  4. Go流程结构(for)

    一.程序的流程结构 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构. 顺序结构:代码从上向下逐行的执行 选择结构:条件满足,某些代码才会被执行.0-1次 if语句,switch语句 循环结 ...

  5. 巨细靡遗流程控制,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang流程结构详解EP09

    流程结构就是指程序逻辑到底怎么执行,进而言之,程序执行逻辑的顺序.众所周知,程序整体都是自上由下执行的,但有的时候,又不仅仅是从上往下执行那么简单,大体上,Go lang程序的流程控制结构一共有三种: ...

  6. shell 流程结构

    if 判断语句 if [ $a == $b ] then echo "等于" else echo "不等于" fi case分支选择 case $xs in ) ...

  7. C++入门到理解阶段二基础篇(5)——C++流程结构

    1.顺序结构 程序从上到下执行 2.选择结构(判断结构) 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). ​ C++ 编程 ...

  8. 程序流程结构——if语句

    c语言支持最基本的三种运行结构: 顺序结构:程序按顺序执行,不发生跳转 选择结构:根据是否满足条件 ,有选择的执行相应功能 循环结构:依据条件是否满足,循环多次执行某段代码 #define _CRT_ ...

  9. Python新手入门值流程结构

    if-else socore =int(input('请输入成绩')); if socore>=90 : print("A") elif socore>=80 : pr ...

随机推荐

  1. selenium统计网页加载时间

    参考网址: https://blog.csdn.net/thlzjfefe/article/details/99712974 https://blog.csdn.net/weixin_43664254 ...

  2. "const char *" 类型的值不能用于初始化 "char *" 类型的实体

    用vs2019发现会出现这样的问题 最后发现只要设置一下就解决了,解决方案如下: 右击该项目,选择属性->c/c++->语言->将符合模式改为否就行了... 设置之后程序没有再报错, ...

  3. Chrome 提标 您的浏览器限制了第三方Cookie...解决方法

    最近升级Chrome后会出现  您的浏览器限制了第三方Cookie,这将影响您正常登录,您可以更改浏览器的隐私设置,解除限制后重试. 解决方法: chrome://flags/ 把这句复制到浏览器回车 ...

  4. 忘记本地MySQL数据库密码的解决方法

    平台:win7 1.打开cmd窗口,进入 MySQL的安装目录. 2.停止MySQL的服务.已经停止了. 右键MySQL,看到启动是可点击的,证明MySQL服务已停止运行. 3.将root用户对数据库 ...

  5. 一次m2eclipse的安装大坑经历之http://m2eclipse.sonatype.org/sites/m2e

    m2eclipse 插件的安装在<Maven 实战>这本书上是这么说的: ”由于Eclipse默认没有集成对Maven的支持,幸运的是由Maven之父Jason Van Zyl创立的Son ...

  6. zabbix4.2配置监控nginx服务

    1.监控原理 通过status模块监控(--with-http_stub_status_module)  2.修改nginx配置(/etc/nginx/conf.d/default.conf) 在被监 ...

  7. NPOI _导出exl(简单应用)

    1. 导出exl表格,创建表格导出到客户端 public static MemoryStream Export_Table<T>(List<T> datalist) { Mem ...

  8. 大二组队(NABCD)

    (Need)需求 很多时候,外人都不了解我们的校园.为了宣传铁大.让更多人了解校园.走进铁大. (Approach)做法 我们有最基本的展示.对校园风貌有基本的讲解.有论坛供应大家讨论. (Benef ...

  9. java-判断年份是不是闰年

    if ((year%4==0)&&(year%100!=0)||(year%400==0)) {//是闰年 leapYear = true; }

  10. word文档巧替换(空行替换、空格替换、软回车替换成硬回车)

    一.空行替换 在日常工作中,我们经常从网上下载一些文字材料,往往因空行多使得页数居高不下.一般方法是:在“编辑”菜单中打开“查找和替换”对话框(或按ctrl+H),在“查找内容”中输入“^p^p”“替 ...