Go语言程序设计(十)选择结构和循环结构

一、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语句可以修改如下:

for k,_ : = range str {
    ....
}

        解决上面的问题,也可以直接将“值"丢掉。这是因为k本身就在第一位,会 首先获取数据。无论有没有占位符,k都将获取想要的数据。代码如下:

for k := range str {
    ......
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值