🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# **程序流程控制** 在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控 制语句。 1) 顺序控制 2) 分支控制 3) 循环控制 #### **顺序控制** 程序从上到下逐行地执行,中间没有任何判断和跳转。 一个案例说明,必须下面的代码中,没有判断,也没有跳转.因此程序按照默认的流程执行,即顺 序控制。 分支控制就是让程序有选择执行。有下面三种形 **(if后面没有()当然不推荐使用写了也不会报错,else不能和前后的大括号在不同行会报错)** 1) 单分支 ![](https://img.kancloud.cn/94/d8/94d8a4db50eb74d7810eb43ed7dbb39e_764x235.png) 2) 双分支 ![](https://img.kancloud.cn/af/f7/aff7216cda5eb1c481621edb06b3fb2c_940x199.png) 3) 多分支 ![](https://img.kancloud.cn/b4/16/b41644049c517cf21ed262b2920aa135_948x335.png) **注意在go中条件语句中不能有赋值语句其他语言可以(例如 php)但是go中会编译错误** **if语句前面可以有一个语句例如** ``` if err := recover; err != nil { fmt.Println("错误处理", err) } ``` ## **switch 分支控制** 1) switch 的执行的流程是,先执行表达式,得到值,然后和 case 的表达式进行比较,如果相等, 就匹配到,然后执行对应的 case 的语句块,然后退出 switch 控制。 2) 如果 switch 的表达式的值没有和任何的 case 的表达式匹配成功,则执行 default 的语句块。执行尚硅谷 Go 语言课程 后退出 switch 的控制. 3) golang 的 case 后的表达式可以有多个,使用 逗号 间隔. 4) golang 中的 case 语句块不需要写 break , 因为默认会有,即在默认情况下,当程序执行完 case 语 句块后,就直接退出该 switch 控制结构。 ![](https://img.kancloud.cn/45/a2/45a2e75f7a77041210249a61daf89121_989x429.png) 注意事项: 1) case/switch 后是一个表达式( 即:常量值、变量、一个有返回值的函数等都可以) 2) case 后的各个表达式的值的数据类型,必须和 switch 的表达式数据类型一致 3) case 后面可以带多个表达式,使用逗号间隔。比如 case 表达式 1, 表达式 2 ... 4) case 后面的表达式如果是常量值(字面量),则要求不能重复 5) case 后面不需要带 break , 程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如 果一个都匹配不到,则执行 defaul 6) default 语句不是必须的. 7) switch 后也可以不带表达式,类似 if --else 分支来使用。 8) switch 后也可以直接声明/定义一个变量,分号结束,不推荐。 9) switch 穿透\-fallthrough ,如果在 case 语句块后增加 fallthrough ,则会继续执行下一个 case,也 叫 switch 穿透 10) Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的 变量类型 #### **switch 和 if 的比较** 总结了什么情况下使用 switch ,什么情况下使用 if 1) 如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用 swtich 语句,简洁高效。 2) 其他情况:对区间判断和结果为 bool 类型的判断,使用 if,if 的使用范围更广。 ## **for 循环控制** ``` for 循环变量初始化; 循环条件; 循环变量迭代 { 循环操作(语句) } ``` 对上面的语法格式说明 1) 对 for 循环来说,有四个要素: 2) 循环变量初始化 3) 循环条件 4) 循环操作(语句) ,有人也叫循环体。 5) 循环变量迭代 for 循环执行的顺序说明: 1) 执行循环变量初始化,比如 i := 1 2) 执行循环条件, 比如 i <= 10 3) 如果循环条件为真,就执行循环操作 :比如 fmt.Println(“....”) 4) 执行循环变量迭代 , 比如 i++ 5) 反复执行 2, 3, 4 步骤,直到 循环条件为 False ,就退出 for 循环。 #### **for 循环的使用注意事项和细节讨论** ![](https://img.kancloud.cn/59/2f/592fac6fb332f908a1fd2d73b2a2c0e4_689x223.png) ![](https://img.kancloud.cn/63/5f/635f11ecc23554d5c30edff4674995a8_760x322.png) for 的三个值我们可以每个去掉进行进一步尝试 #### **字符串遍历方式 ** 1-传统方式 ![](https://img.kancloud.cn/42/fe/42fedbc757ab695f1cc8bf865579d69c_664x183.png) 2字符串遍历方式 2-for - range ![](https://img.kancloud.cn/2f/f8/2ff81a77e1c6a77578f88f92e2cb5cc3_683x196.png) 如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的 对字符串的遍历是按照字节来遍历,而一个汉字在 utf8 编码是对应 3 个字节。 如何解决 需要要将 str 转成 \[\]rune 切片.=> 体验一把 ![](https://img.kancloud.cn/98/2e/982ed15c619434aee2b27803eb0addc2_768x187.png) 对应 for-range 遍历方式而言,是按照字符方式遍历。因此如果有字符串有中文,也是 ok ![](https://img.kancloud.cn/ae/68/ae6834188a7a396c5d89d15b2a410e9a_825x218.png) #### **while 和 do...while的实现** Go 语言没有 while 和 do...while 语法,这一点需要同学们注意一下,如果我们需要使用类似其它语 言(比如 java / c 的 while 和 do...while ),可以通过 for 循环来实现其使用效果。 #### **while 循环的实现** ![](https://img.kancloud.cn/69/0f/690f563132f5825b6b11cc1a7c0ded90_885x284.png) 1) for 循环是一个无限循环 2) break 语句就是跳出 for 循环 ![](https://img.kancloud.cn/f5/21/f521f44eb1efa56687ecad193a789bf2_861x502.png) #### **do..while 的实现** ![](https://img.kancloud.cn/fe/60/fe60cd237009bbf95c43700f5d8f9590_940x286.png) 1) 上面的循环是先执行,在判断,因此至少执行一次。 2) 当循环条件成立后,就会执行 break, break 就是跳出 for 循环,结束循环. ![](https://img.kancloud.cn/5a/39/5a393bc813baed9ea901211826567ccb_787x285.png) #### **跳转控制语句-break** break 语句用于终止某个语句块的执行,用于中断当前 for 循环或跳出 switch 语句 1) break 语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块 ![](https://img.kancloud.cn/38/90/3890396873a73978638d1a5fc488aa11_857x370.png) (2) break 默认会跳出最近的 for 循环 (3) break 后面可以指定标签,跳出标签对应的 for 循环 #### **跳转控制语句-continue** continue 语句用于结束本次循环,继续执行下一次循环。 continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环 , 这个和前面的 break 标签的使用的规则一样. ![](https://img.kancloud.cn/05/9a/059a0a83e971022b6015894e13b1f8ec_706x225.png) #### **跳转控制语句-goto** 1) Go 语言的 goto 语句可以无条件地转移到程序中指定的行。 2) goto 语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。 3) 在 Go 程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序 都产生困难 ![](https://img.kancloud.cn/ce/35/ce3574a2bb20b9b0b39b9d6464abd172_800x452.png) #### **跳转控制语句-return** return 使用在方法或者函数中,表示跳出所在的方法或函数 1) 如果 return 是在普通的函数,则表示跳出该函数,即不再执行函数中 return 后面代码,也可以 理解成终止函数。 2) 如果 return 是在 main 函数,表示终止 main 函数,也就是说终止程序。