Go基础05 条件

2017-08-22 16:38:14
  • if语句
    写一个完整的程序,命名为ifDemo.go.这个程序用于实现if结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package main

    import "fmt"

    func main() {
    var x, i int = 1, 1
    if i > 0 {
    fmt.Println("x=%d ",x+1)
    }
    }

    复杂一些的if

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package main 

    import "fmt"

    func main() {
    var i int = 1
    if i>0 {
    fmt.Println("positive i")
    i++
    }else if i == 0 {
    fmt.Println("i is 0")
    i = i*10
    }else {
    fmt.Println("negative i")
    i--
    }
    fmt.Println("new i: ", i)
    }

    这里有三个块,分别属于if, else if, else 程序根据条件,只执行三个分支中的一个

    整个if可以放在另一个if语句中,也就是if结构的嵌套使用:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package main

    import "fmt"

    func main() {
    var i int = 5
    if i > 1 {
    fmt.Println("i bigger than 1")
    fmt.Println("good")
    if i >2 {
    fmt.Println("i bigger than 2")
    fmt.Println("even better")
    }
    }

    }
  • switch语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package main

    import "fmt"

    func main() {
    var i int = 4
    switch i {
    case 5:
    fmt.Println("better")
    case 3:
    fmt.Println("good")
    case 2:
    fmt.Println("not bad")
    default:
    fmt.Println("bad")
    }
    }
  • select语句
    select 的代码形式和 switch 非常相似,不过 select 的 case 里的操作语句只能是[IO 操作]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package main

    import "fmt"

    func main() {
    var c1, c2, c3 chan int
    var a, b int
    select {
    case a = <-c1:
    fmt.Println("receive %v from c1", a)
    case c2 <- b:
    fmt.Println("send %v to c2", b)
    default:
    fmt.Println("not ready")
    }
    }

    代码执行到 select 时,case 语句会按照源代码的顺序被评估,且只评估一次,评估的结果会出现下面这几种情况
    除 default 外,如果只有一个 case 语句评估通过,那么就执行这个case里的语句;
    除 default 外,如果有多个 case 语句评估通过,那么通过伪随机的方式随机选一个;
    如果 default 外的 case 语句都没有通过评估,那么执行 default 里的语句;
    如果没有 default,那么 代码块会被阻塞,指导有一个 case 通过评估;否则一直阻塞
    如果 case 语句中 的 receive 操作的对象是 nil channel,那么也会阻塞

  • 总结
    if 语句由一个布尔表达式后紧跟一个或多个语句组成,可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句
    switch 语句用于基于不同条件执行不同动作。
    select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行.如果 case 语句中 的 receive 操作的对象是 nil channel,那么也会阻塞


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。