Golang基础(二) | 流程控制

作者 : 开心源码 本文共2416个字,预计阅读时间需要7分钟 发布时间: 2022-05-13 共188人阅读

if

if也许是各种编程语言中最常见的了,它的语法概括起来就是:假如满足条件就做某事,否则做另一件事。
Go里面if条件判断语句中不需要括号,如下代码所示

if x > 10 {    fmt.Println("x is greater than 10")} else {    fmt.Println("x is less than 10")}

Go的if还有一个强大的地方就是条件判断语句里面允许公告一个变量,这个变量的作用域只能在该条件逻辑块内,其余地方就不起作用了,如下所示

// 计算获取值x,而后根据x返回的大小,判断能否大于10。if x := computedValue(); x > 10 {    fmt.Println("x is greater than 10")} else {    fmt.Println("x is less than 10")}//这个地方假如这样调用就编译出错了,由于x是条件里面的变量fmt.Println(x)

若有多个IF条件,可以参照下面的写法

if integer == 3 {    fmt.Println("The integer is equal to 3")} else if integer < 3 {    fmt.Println("The integer is less than 3")} else {    fmt.Println("The integer is greater than 3")}

for

Go里面最强大的一个控制逻辑就是for,它就可以用来循环读取数据,又可以当作while来控制逻辑,还能迭代操作。它的语法如下:

for expression1; expression2; expression3 {    //...}

或者者函数调用返回值之类的,expression2是用来条件判断,expression1在循环开始之前调用,expression3在每轮循环结束之时调用。
具体用法,可以参照下面的例子:

package mainimport "fmt"func main(){    sum := 0;    for index:=0; index < 10 ; index++ {        sum += index    }    fmt.Println("sum is equal to ", sum)}// 输出:sum is equal to 45

有些时候假如我们忽略expression1和expression3:

sum := 1for sum < 1000 {    sum += sum}

在循环里面有两个关键操作break和continue ,break操作是跳出当前循环,continue是跳过本次循环。当嵌套过深的时候,break可以配合标签使用,即跳转至标签所指定的位置,详细参考如下例子:

for index := 10; index>0; index-- {    if index == 5{        break // 或者者continue    }    fmt.Println(index)}// break打印出来10、9、8、7、6// continue打印出来10、9、8、7、6、4、3、2、1

break和continue还可以跟着标号,用来跳到多重循环中的外层循环
for配合range可以用于读取slice和map的数据:

for k,v:=range map {    fmt.Println("map's key:",k)    fmt.Println("map's val:",v)}

因为 Go 支持 “多值返回”, 而对于“公告而未被调用”的变量, 编译器会报错, 在这种情况下, 可以使用_来丢弃不需要的返回值 例如

for _, v := range map{    fmt.Println("map's val:", v)}

switch

有些时候你需要写很多的if-else来实现少量逻辑解决,这个时候代码看上去就很丑很冗长,而且也不易于以后的维护,这个时候switch就能很好的处理这个问题。它的语法如下

switch sExpr {case expr1:    some instructionscase expr2:    some other instructionscase expr3:    some other instructionsdefault:    other code}

sExpr和expr1、expr2、expr3的类型必需一致。Go的switch非常灵活,表达式不必是常量或者整数,执行的过程从上至下,直到找到匹配项。

i := 10switch i {case 1:    fmt.Println("i is equal to 1")case 2, 3, 4:    fmt.Println("i is equal to 2, 3 or 4")case 10:    fmt.Println("i is equal to 10")default:    fmt.Println("All I know is that i is an integer")}

在第5行中,我们把很多值聚合在了一个case里面,同时,Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其余case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

integer := 6switch integer {case 4:    fmt.Println("The integer was <= 4")    fallthroughcase 5:    fmt.Println("The integer was <= 5")    fallthroughcase 6:    fmt.Println("The integer was <= 6")    fallthroughcase 7:    fmt.Println("The integer was <= 7")    fallthroughcase 8:    fmt.Println("The integer was <= 8")    fallthroughdefault:    fmt.Println("default case")}

goto

Go有goto语句(不建议使用)。用goto跳转到必需在当前函数内定义的标签。例如假设这样一个循环:

func myFunc() {    i := 0Here:   //这行的第一个词,以冒号结束作为标签    println(i)    i++    goto Here   //跳转到Here去}
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Golang基础(二) | 流程控制

发表回复