if 语句

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

/_src/tour/if.go

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8.  
  9. func sqrt(x float64) string {
  10. if x < 0 {
  11. return sqrt(-x) + "i"
  12. }
  13. return fmt.Sprint(math.Sqrt(x))
  14. }
  15.  
  16.  
  17. func main() {
  18. fmt.Println(sqrt(2), sqrt(-4))
  19. }

初始语句

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

/_src/tour/if-with-a-short-statement.go

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8.  
  9. func pow(x, n, lim float64) float64 {
  10. if v := math.Pow(x, n); v < lim {
  11. return v
  12. }
  13. return lim
  14. }
  15.  
  16.  
  17. func main() {
  18. fmt.Println(
  19. pow(3, 2, 10),
  20. pow(3, 3, 20),
  21. )
  22. }

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

if-else 语句

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

/_src/tour/if-and-else.go

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7.  
  8.  
  9. func pow(x, n, lim float64) float64 {
  10. if v := math.Pow(x, n); v < lim {
  11. return v
  12. } else {
  13. fmt.Printf("%g >= %g\n", v, lim)
  14. }
  15. // can't use v here, though
  16. return lim
  17. }
  18.  
  19.  
  20. func main() {
  21. fmt.Println(
  22. pow(3, 2, 10),
  23. pow(3, 3, 20),
  24. )
  25. }

注解

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

下一步

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

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

../_images/wechat-mp-qrcode.png小菜学编程

微信打赏