if 语句
跟 for 语句 一样, if 语句条件表达式不需要括号包围,但是花括号却不能省略。
- 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
- 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
代码块也是可见的。
- 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 前,需要对参数进行求值。
下一步
订阅更新,获取更多学习资料,请关注我们的 微信公众号 :