一、if语句
在Go语言中,共提供三种形式的if语句:
- if语句
- if else语句
- if else if语句
if语句的注意事项:
- 左大括号“{”必须和if语句放在同一行,否则编译会出错
- 条件表达式和if关键字之间使用空格隔开即可,表达式无需用括号括起来
- 支持初始化条件表达式,如if a:=1; a>0。在这条语句中,先给条件变量a赋初值,然后再比较。初始化语句和条件语句之间使用“;”隔开。
- 在有返回值的函数中,不允许在if语句块中执行return语句,否则编译会失败,例如:
func example(x int) int {
if x==0{
return 10
} else {
return x
}
}
上述语句在编译时,编译器会报错,错误信息为:
function ends without a return statement
产生失败的原因是Go编译器无法找到终止该函数的return语句。
二、switch语句
switch语句的控制类型由switch 条件表达式决定,控制类型可以是任意Go语言所支持的数据类型。每一个switch分支常量表达式值的类型,必须和控制类型保持一致,如果不一致,必须显式地转换成同一种类型。
如果同一个switch语句中,有两个或两个以上的switch分支的常量表达式取得相同的值,则编译时会出错。另外,每一个switch语句最多只能有一个default分支。
switch语句的执行步骤如下:
- (1)计算出switch表达式的值,并转换成控制类型。.
- (2)如果switch条件表达式的值等于某个switch分支的常量表达式的值,则程序控制跳转到这个case标号后的语句列表中执行。
- (3)如果switch条件表达式的值,无法与switch语句中任何一个case常量表达式的值相匹配,而且switch语句中有default分支,则程序会控制跳转到default标号后的语句列表中执行。
- (4)如果switch条件表达式的值,无法与switch语句中任何一个case常量表达式的值相匹配,且switch语句中没有default分支,则程序控制会跳转到switch语句的结尾,switch语句执行结束。
1、switch语句的特殊形式
(1)多选项case语句:case中可以对多个条件进行测试,任意一个满足都会执行,多个用逗号隔开。
(2)fallthrough语句:在执行完一个case分之后,不退出继续执行下一个case分支
(3)无条件表达式switch语句:switch关键字后面没有条件表达式,则必须在case语句中进行条件判断。
2、switch的注意事项
(1)左大括号“{”必须和switch语句同处一行,否则编译会出错。
(2)条件表达式不限制为常量或者整数。
(3)不需要使用break语句跳出case语句。
(4)和if语句一样,switch语句也支持初始化条件表达式。
三、for语句
在for语句中,初始化表达式给循环变量赋初值,设置循环的开始位置;条件表达式用于判断是否执行本次循环;步进表达式用于在每次循环体执行后更改循环变量的值。
for语句的执行步骤如下:
- (1)先执行初始化表达式,给循环变量赋初值,这一步只执行一遍。
- (2)执行条件表达式,如果结果为true,则执行循环体中的语句,循环体中的语句执行结束,继续执行步骤(3);如果结果为false, 则结束循环,转到步骤(5)。
- (3)执行步进表达式,修改循环变量的值。
- (4)转回步骤(2)继续执行。
- (5)循环结束,执行for循环体外的语句。
使用for语句的注意事项:
- (1)for语句中的三个表达式之间用“;”隔开,不能使用括号括起来
- (2)左大括号“{”必须和for语句放在同-一行,否则编译会出错
- (3)循环变量的名字尽量要短,比如ij、z或ix等。
- (4)不要在循环体中修改循环变量的值,否则会造成意想不到的错误,这已经在很多语言中得到了证明。
- (5)如果使用多个循环变量,Go语言不支持以“,”为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。
例如,下面的多个循环变量的赋值方式是正确的:
for i,j :=0,10; i<j; i,j=i+1,j-1 {
}
下面的赋值方式是错误的:
for i:=0,j:=10; i< j; i++,j-- {
}
四、跳转语句
1、break语句
break语句是限定转向语句,它能控制程序流程跳出所在的结构,把程序流程转向所在结构之后。所以,break在for循环结构中的作用就是控制程序流程跳出循环体,即提前结束循环。
2、continue语句
continue语句用于for循环结构中,它的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环体的判定。
break语句和continue语句的区别在于:continue语句只结束本次循环,而不是终止整个循环;而break语句则是终止整个循环过程,不再判断执行循环的条件是否成立。
3、goto语句
和break、continue语句不同,goto语句天生就要和标签(Label)配合来使用。goto 语句可以调整程序执行的位置,它可以让程序无条件跳转到一个标签(Label)之处继续执行。
其格式如下:
LABEL:
.
.
.
goto LABEL
goto语句和标签配合使用时,标签的后面要加“:”,另外标签是区分大小写的,若不使用会造成编译错误,使用时要注意。
五、for range语句
在Go语言中,for语句还可以和range关键字配合,组成forrange语句,forrange语句可以对数组(Array)、切片(Slice)等对象的元素进行遍历。在Go语言中,range可以看作是一个迭代器,当它被调用时,它会从所遍历的数组返回一个键值对(Key-ValuePair)。
基于不同的数据对象,range返回不同的键值对。当对数组或切片进行遍历时,range返回数组下标作为键(Key),数组下标所对应的元素作为值(Value)。
如果只需要“值”不需要“键”,for range语句可以修改如下:
for _,v : = range str {
...
}
如果没有“_”作为占位符,那么range会把第一个产生的数赋给义。而有了占位符,range首先将key赋给_”,然后再将其丢掉。最后range会将value赋给v,这样才能获得用户所需要的数据。
如果只需要“键”不需要“值”,for range语句可以修改如下:文章来源:https://www.toymoban.com/news/detail-528881.html
for k,_ : = range str {
....
}
解决上面的问题,也可以直接将“值"丢掉。这是因为k本身就在第一位,会 首先获取数据。无论有没有占位符,k都将获取想要的数据。代码如下:文章来源地址https://www.toymoban.com/news/detail-528881.html
for k := range str {
......
}
到了这里,关于Go语言程序设计(十)选择结构和循环结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!