程序流程控制
顺序结构
就是一直走下去;
分支结构
单分支结构
就是只有一个if判断语句
1 | age:=0 |
在判断中判断语句的括号有没有都是一样的,但是在for循环里面括号必须有,但是if循环我们尽量不要写括号
双分支结构和多分支
就是有if和else的判断
1 | age := 0 |
注意一点,else必须写在**==}==**的后面,不然会报错
switch
1 | age := 0 |
case后面不用再写 break默认会有,,如果case有多个情况,使用逗号分割,后面的执行语句有多个使用分号隔开,条件switch和结果case之间的数据类型要完全一致,不一致使用强制类型转换
case语句的后面条件不能重复
switch后面不加条件的话,就会把我们的一个switch语句当成一个if-else语句使用
1 | switch { |
不同点:fallthrough
匹配第一个以后,不会退出直接再向下运行下面那个语句,例如下面这个语句机会输出第一行和第二行,fallthrough强制执行后面的第一个case代码。==不能再最后一个语句或者default后面加上fallthrough==
1 | switch { |
不同点2:可以判断interface类型
1 | var v interface{} |
if和switch比较
- 如果判断的具体数值不多,并且都是简单数据类型使用switch,因为简洁;高效
- 对区间判断为bool的尽量使用if,if使用的更多
循环结构
for循环
1 | c:=1 |
for后面的语句不能加上括号,并且是里面定义的变量是局部变量,只能再循环内部使用,其他的变体和java一样,赋值写在外面,或者i++写在循环里面
无限循环:
不写条件就是的for循环就是无限循环,退出就是break
1 | c:=1 |
使用for-range遍历字符串或者数组
1 | c:="abscdg" |
range()返回的数据,一个是index,下标,一个是value,字符(char|byte),不想使用下标,就使用下划线忽略,就可以只使用字符了
特殊情况:遍历一个带有中文字符的字符串,使用[]rune,切片转换字符串
1 | str:="我爱你中国" |
输出结果:
1 | 0,我 |
这里又发现一个新东西,rune于是我又去网上找一些教程,知道了一点关于这个东西的信息
1 | str:="我爱你中国" |
他是专门拿来处理字符的一种数据类型,实际上就是另一种 int32,我们使用len()去求字符串长度,求的是他的底层长度,就是一个中文字符占用3个字节,所以5个字就是15.所以我们再处理字符串的时候,尽量使用rune
while和do…while循环
GO语言里面没有以上两种循环
while是先判断在执行,do…while是先执行在判断,所以我们可以根据这一个特性改写for循环
双重循环打印一个9*9乘法表,简单:
1 | for i:=1;i<10;i++{ |
break和continue
用法和以前一样;
break直接退出循环,continue只是退出这次循环,但是外层循环并未结束
goto跳转控制语句
软件考试里面说过限制使用goto,所以不看了
return
- return在普通函数中,表示跳出该函数,不在执行后面的东西,如果函数没有指明返回值类型,可以直接返回空,但是如果指明了,那么就要返回指定类型
- 在main函数里面表示终止函数



