if 语句

for 语句 一样, if 语句条件表达式不需要括号包围,但是花括号却不能省略。

/_src/tour/if.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package main

import (
    "fmt"
    "math"
)


func sqrt(x float64) string {
    if x < 0 {
        return sqrt(-x) + "i"
    }
    return fmt.Sprint(math.Sqrt(x))
}


func main() {
    fmt.Println(sqrt(2), sqrt(-4))
}

初始语句

if 语句同样支持初始化语句,在条件表达式求值之前执行。 初始化语句一般都是 := 赋值语句。

/_src/tour/if-with-a-short-statement.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import (
    "fmt"
    "math"
)


func pow(x, n, lim float64) float64 {
    if v := math.Pow(x, n); v < lim {
        return v
    }
    return lim
}


func main() {
    fmt.Println(
        pow(3, 2, 10),
        pow(3, 3, 20),
    )
}

在初始语句中申明的变量,只在 if 结构中可见。

if-else 语句

在初始化语句定义的变量,在 else 代码块也是可见的。

/_src/tour/if-and-else.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
    "fmt"
    "math"
)


func pow(x, n, lim float64) float64 {
    if v := math.Pow(x, n); v < lim {
        return v
    } else {
        fmt.Printf("%g >= %g\n", v, lim)
    }
    // can't use v here, though
    return lim
}


func main() {
    fmt.Println(
        pow(3, 2, 10),
        pow(3, 3, 20),
    )
}

注解

main 函数中两次 pow 调用都在 fmt.Println 调用之前执行。 因为,调用 fmt.Println 前,需要对参数进行求值。

下一步

下一节 我们一起来看看 Go 语言 switch 语句

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../_images/wechat-mp-qrcode.png

小菜学编程

微信打赏