go流程控制

1.if-else

用于测试条件是否成立,成立则执行if括起来的代码:

if condition {
    //do something
}

如果需要在条件不满足时执行,则只需要加上else即可:

if condition {
    //do something
} else {
    //do simething
}

如果存在多个条件,可以使用else-if增加新的判断:

if condition1 {
    //do something
} else if condition2 {
    //do something
} else {
    //do something
}

else-if的数量是没有限制的,但是为了代码的可读性,尽量少用else-if。

2.switch

go的switch使用非常灵活,接受任意形式的表达式:

switch var1 {
    case val1:
        //do something
    case val2:
        //do something
    default:
        //do something
}

var1可以是任何类型,而val和val2可以是同类型的任意值。你可以同时在一个分支中使用多个值:

case val1, val2, val3:

go中的switch不需要break来结束分支。如果需要在执行了一个case分支后继续往后执行,只需要使用fallthrough关键字即可:

switch i {
    case 0: fallthrough
    case 1:
        f()
}

当case后的语句只有一行时,可以直接将语句放在case后面。case后的执行语句也不需要花括号。case同样支持逻辑判断:

switch i {
    case i > 0:
        //do something
    case i < -10:
        //do something
    default:
        //do something
}

同样的,可以使用return来提前结束代码块的执行。

3.for

想要执行某些语句,go中可以使用for来执行。for的基本形式为:

for 初始化语句; 条件语句; 修饰语句 {
}

例子:

for i := 0; i < 3; i++ {
    fmt.Println("for index = ", i)
}

输出:

for index = 0
for index = 1
for index = 2

因为go具有平行复制的特性,所以也可以在for中使用多个计数器:

for i, j := 0, 10; i < j; i++, j = i + 1 {
}

也可以将两个for循环嵌套使用:

for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        fmt.Println(j)
    }
}

还可以循环一个Unicode字符串:

str := "He To"

for i := 0; i < len(str); i++ {
    fmt.Printf("for index = %d, is = %s", i, str[i])
}

输出:

for index = 0, is = H
for index = 1, is = e
for index = 2, is = 
for index = 3, is = T
for index = 4, is = o

for也支持纯条件语句,可以将这个认为是没有初始化语句和修饰语句的for循环:

i := 5
for i >= 0 {
    i--;
    fmt.Println(i)
}

输出:

5
4
3
2
1
0
-1

for还有另外一个表达方式for-range,这是go特有的一种方式,在很多场景下都很实用,它可以迭代任何一个集合,一般形式为:

for i, val := range coll {}

val对应的是集合中对应索引的值拷贝,刚才的Unicode字符串就可以直接使用range来循环:

str := "He To"

for i, val := range str {
    fmt.Printf("for index = %d, is = %s", i, val)
}

4.Break和continue

break用于条件,循环语句中的退出操作,break做的作用结果是跳过整个代码块,执行后续的操作。
例子:

for i := 0; i < 3; i++ {
    for j := 0; j < 5; j++ {
        if j > 3 {
            break
        }
        fmt.Println(j)
    }
    fmt.Println()
}

输出:

0123 0123 0123

关键字continue用于忽略循环体中剩余分代码块直接进入下一次循环,但不是无条件的执行下一次循环,执行之前依旧需要满足条件判断:

for i := 0; i < 5; i++ {
    if i == 3 {
        continue
    }
    fmt.Println(i)
}

//输出
0 1 2

continue只能用于for循环中。

5.标签Label与goto

for,switch都可以配合Label使用,即第一行第一个冒号:结尾的单词:

LABEL1:
    for i := 0; i < 5; i++ {
        if i == 3 {
            continue LABEL1
        }
        fmt.Println(i)
    }
    
// 输出
0 1 2 4 // 3被跳过了

但注意标签和 goto 语句之间不能出现定义新变量的语句,否则会导致编译失败。
另外,可以使用goto语句和标签配合使用来模拟循环

i:=0
HERE:
    print(i)
    i++
    if i==5 {
        return
    }
    goto HERE

但是这种方式是不推荐使用,如果一定要使用,将标签放在goto的后面,但注意标签和goto语句之间不能出现定义新变量的语句,否则会导致编译失败。

微信搜索「goentry-xyz」,关注公众号「灯下独码」

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值