Golang控制流

作者: 乐百川 | 来源:发表于2017-06-01 23:34 被阅读37次

条件语句

if语句

下面是Golang的if语句,需要注意的是条件判断块不需要小括号,而且if语句的大括号不能省略,即使其中只有一行语句。

if condition == true {
    fmt.Println("条件为真")
} else {
    fmt.Println("条件为假")
}

if语句可以包含一个初始化块,初始化块和判断条件中使用;分隔。初始化块用来初始化可能在语句中使用的变量,这些变量的作用域是if语句。

if i := 0; i == 0 {
    fmt.Println("i==0")
} else {
    fmt.Println("i!=0")
}

switch语句

如果需要多重条件判断,可以使用switch语句。和if语句一样,switch语句可以拥有一个初始化块。而且在switch语句中,case子句是默认中断的,也就是说,如果匹配到了某个case子句,就不会执行其他语句,而是直接结束。如果希望执行某个case子句之后继续执行下面的其他子句,需要使用fallthrough关键字。

switch x := 0; x {
case 0:
    fmt.Println(0)
case 1:
    fmt.Println(1)
case 2:
    fallthrough
case 3:
    fmt.Println("2<=x<=3")
default:
    fmt.Println("other")
}

switch语句可以没有条件,这时候相当于switch true。这是一种非常方便的声明多级if-else语句的方式。

var i = 0
//没有代码块默认为switch true,相当于多级if-else
switch {
case i == 0:
    fmt.Println("i==0")
case i == 1:
    fmt.Println("i==1")
default:
    fmt.Println("other")
}

循环语句

for循环

除了不使用小括号之外,Golang的for循环和其他语言的没什么区别。

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

for循环(while)

for循环可以省略循环前后语句,只留下条件判断。

i = 0
for ; i < 1000; {
    i++
}

这时候可以省略前后分号,这种情况下for循环和while循环等价。

i := 0
for i < 1000 {
    i++
}

如果要使用无限循环,把整个条件块去掉就行了。

i = 0
//无限循环
for {
    if i == 500 {
        break
    }
    i++
}

推迟语句(Defer)

Golang官方教程把这个推迟语句也放到了控制流里面,不过我不知道合适不合适。所谓推迟语句,会在当前语句所在的代码块结束的时候执行。所以,推迟语句常常用来释放代码中使用的资源。如果代码块中有多个推迟语句,会按照从后到前的方式依次执行。

所以,在代码中每使用一个资源,我们只要马上紧接着写对应的释放语句,在代码块结束之后就能以完美的方式释放资源了。

func deferStatement() {
    //推迟语句,该语句会在所在代码块结束时调用
    //推迟语句的参数求值是立即求值的,只有调用是推迟的
    //如果存在多个推迟语句,按照站的方式执行,即前面的语句后执行
    fmt.Println("使用了资源1")
    defer fmt.Println("释放了资源1")

    fmt.Println("使用了资源2")
    defer fmt.Println("释放了资源2")

    fmt.Println("使用了资源3")
    defer fmt.Println("释放了资源3")

    fmt.Println("使用这些资源处理数据")
}

上面这段代码的执行结果很完美。

使用了资源1
使用了资源2
使用了资源3
使用这些资源处理数据
释放了资源3
释放了资源2
释放了资源1

推迟语句中的参数是立即求值的,推迟语句的调用会推迟到代码块结束时。这一点需要注意。

相关文章

  • Golang控制流

    条件语句 if语句 下面是Golang的if语句,需要注意的是条件判断块不需要小括号,而且if语句的大括号不能省略...

  • 【技术】golang初探——控制流

    循环语句 Go 只有一种循环结构——for 循环。基本的 for 循环除了没有了 ( ) 之外(甚至强制不能使用它...

  • Golang基础(二)——流程控制语句

    Golang基础——流程控制语句 @([07] golang)[Go总结] [TOC] for循环语句 go只有f...

  • 9.控制流(theControlFlow)

    控制流 kotlin_控制流 swift控制流

  • Python | 常用的控制流语句

    一、控制流语句介绍 了解什么是控制流语句以及Python常用的两种控制流语句。 1.控制流语句 控制流语句即用来实...

  • Golang流程控制

    Golang流程控制 Golang当中的流程控制ifif语句由一个布尔表达式后紧跟一个或多个语句组成Go变成语言种...

  • golang控制结构

    go中只有一种循环控制结构, for。 没有do或while循环。 Go的循环有三种形式,只有其中的一种使用分号f...

  • Golang 并发控制

    Wait Cancel

  • 控制流

    上一篇:基础运算当前篇:控制流下一篇:集合类型 从大体来讲控制流分为条件语句和循环语句,而这两种语句差不多就是程序...

  • 控制流

    0. 分支结构 概念:指程序的 流程走向,比较像一棵树 分散 的 树枝 分类单分支判断1. 一般形式 age ...

网友评论

本文标题:Golang控制流

本文链接:https://www.haomeiwen.com/subject/okqyfxtx.html