跟 for 语句 一样, if 语句条件表达式不需要括号包围,但花括号却不能省略。我们来看一个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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))
}
|
sqrt 函数计算平方根,并以字符串形式返回。如果对负数求根(第 9 行),将以虚数形式返回。
初始语句
if 语句同样支持初始化语句,在条件表达式求值之前执行。初始化语句一般都是 :=
赋值语句。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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 代码块也是可见的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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语言】系列文章首发于公众号【小菜学编程】,敬请关注: