当前位置:   article > 正文

【go从入门到精通】if else 条件控制

【go从入门到精通】if else 条件控制

作者简介:

        高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 (谢谢你的关注)
———————————————————————————————————————————

Go 语言条件语句:

        在 Go 语言中,条件语句用于根据不同的条件执行不同的代码。Go 语言提供了两种条件语句:if 语句和switch 语句

if语句 

if由一个布尔表达式后紧跟一个或多个语句组成。

语法

Go 编程语言中 if 语句的语法如下:

    • 可省略条件表达式括号。
    • 持初始化语句,可定义代码块局部变量。 
    • 代码块左 括号必须在条件表达式尾部。

    if 布尔表达式 {
    /* 在布尔表达式为 true 时执行 */
    }     

if 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则不执行。

  1. x := 0
  2. // if x > 10 // Error: missing condition in if statement
  3. // {
  4. // }
  5. if n := "abc"; x > 0 { // 初始化语句未必就是定义变量, 如 println("init") 也是可以的。
  6. println(n[2])
  7. } else if x < 0 { // 注意 else if 和 else 左大括号位置。
  8. println(n[1])
  9. } else {
  10. println(n[0])
  11. }

    注意:go不支持三元操作符(三目运算符) "a > b ? a : b"。   

例子:

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 定义局部变量 */
  5. var a int = 10
  6. /* 使用 if 语句判断布尔表达式 */
  7. if a < 20 {
  8. /* 如果条件为 true 则执行以下语句 */
  9. fmt.Printf("a 小于 20\n" )
  10. }
  11. fmt.Printf("a 的值为 : %d\n", a)
  12. }

以上代码执行结果为:

    a 小于 20
    a 的值为 : 10    

if…else 语句

if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。

语法

Go 编程语言中 if…else 语句的语法如下:

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
  /* 在布尔表达式为 false 时执行 */
}   

if 在布尔表达式为 true 时,其后紧跟的语句块执行,如果为 false 则执行 else 语句块。

实例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 局部变量定义 */
  5. var a int = 100
  6. /* 判断布尔表达式 */
  7. if a < 20 {
  8. /* 如果条件为 true 则执行以下语句 */
  9. fmt.Printf("a 小于 20\n" )
  10. } else {
  11. /* 如果条件为 false 则执行以下语句 */
  12. fmt.Printf("a 不小于 20\n" )
  13. }
  14. fmt.Printf("a 的值为 : %d\n", a)
  15. }

以上代码执行结果为:

    a 不小于 20
    a 的值为 : 100    

if 嵌套语句 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 

Go 编程语言中 if…else 语句的语法如下:

if 布尔表达式 1 {
   /* 在布尔表达式 1 为 true 时执行 */
   if 布尔表达式 2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}    

你可以以同样的方式在 if 语句中嵌套 else if…else 语句

实例

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 定义局部变量 */
  5. var a int = 100
  6. var b int = 200
  7. /* 判断条件 */
  8. if a == 100 {
  9. /* if 条件语句为 true 执行 */
  10. if b == 200 {
  11. /* if 条件语句为 true 执行 */
  12. fmt.Printf("a 的值为 100 , b 的值为 200\n" )
  13. }
  14. }
  15. fmt.Printf("a 值为 : %d\n", a )
  16. fmt.Printf("b 值为 : %d\n", b )
  17. }

以上代码执行结果为

  1. a 的值为 100b 的值为 200
  2. a 值为 : 100
  3. b 值为 : 200

switch 语句

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。
Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。

语法

Go 编程语言中 switch 语句的语法如下:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。
您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

实例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. /* 定义局部变量 */
  5. var grade string = "B"
  6. var marks int = 90
  7. switch marks {
  8. case 90: grade = "A"
  9. case 80: grade = "B"
  10. case 50,60,70 : grade = "C"
  11. default: grade = "D"
  12. }
  13. switch {
  14. case grade == "A" :
  15. fmt.Printf("优秀!\n" )
  16. case grade == "B", grade == "C" :
  17. fmt.Printf("良好\n" )
  18. case grade == "D" :
  19. fmt.Printf("及格\n" )
  20. case grade == "F":
  21. fmt.Printf("不及格\n" )
  22. default:
  23. fmt.Printf("差\n" )
  24. }
  25. fmt.Printf("你的等级是 %s\n", grade )
  26. }

以上代码执行结果为:

  1. 优秀!
  2. 你的等级是 A

Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

语法

Type Switch 语法格式如下:

switch x.(type){
    case type:
       statement(s)      
    case type:
       statement(s)
    /* 你可以定义任意个数的case */
    default: /* 可选 */
       statement(s)
}   

 像我们的panic库里就有这样的代码:

  1. func preprintpanics(p *_panic) {
  2. defer func() {
  3. text := "panic while printing panic value"
  4. switch r := recover().(type) {
  5. case nil:
  6. // nothing to do
  7. case string:
  8. throw(text + ": " + r)
  9. default:
  10. throw(text + ": type " + toRType(efaceOf(&r)._type).string())
  11. }
  12. }()
  13. for p != nil {
  14. switch v := p.arg.(type) {
  15. case error:
  16. p.arg = v.Error()
  17. case stringer:
  18. p.arg = v.String()
  19. }
  20. p = p.link
  21. }
  22. }

 你一定不会感到陌生,实际上这种type switch的用法是非常广泛的。

实例:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var x interface{}
  5. //写法一:
  6. switch i := x.(type) { // 带初始化语句
  7. case nil:
  8. fmt.Printf(" x 的类型 :%T\r\n", i)
  9. case int:
  10. fmt.Printf("x 是 int 型")
  11. case float64:
  12. fmt.Printf("x 是 float64 型")
  13. case func(int) float64:
  14. fmt.Printf("x 是 func(int) 型")
  15. case bool, string:
  16. fmt.Printf("x 是 bool 或 string 型")
  17. default:
  18. fmt.Printf("未知型")
  19. }
  20. //写法二
  21. var j = 0
  22. switch j {
  23. case 0:
  24. case 1:
  25. fmt.Println("1")
  26. case 2:
  27. fmt.Println("2")
  28. default:
  29. fmt.Println("def")
  30. }
  31. //写法三
  32. var k = 0
  33. switch k {
  34. case 0:
  35. println("fallthrough")
  36. fallthrough
  37. /*
  38. Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;
  39. 而如果switch没有表达式,它会匹配true。
  40. Go里面switch默认相当于每个case最后带有break,
  41. 匹配成功后不会自动向下执行其他case,而是跳出整个switch,
  42. 但是可以使用fallthrough强制执行后面的case代码。
  43. */
  44. case 1:
  45. fmt.Println("1")
  46. case 2:
  47. fmt.Println("2")
  48. default:
  49. fmt.Println("def")
  50. }
  51. //写法三
  52. var m = 0
  53. switch m {
  54. case 0, 1:
  55. fmt.Println("1")
  56. case 2:
  57. fmt.Println("2")
  58. default:
  59. fmt.Println("def")
  60. }
  61. //写法四
  62. var n = 0
  63. switch { //省略条件表达式,可当 if...else if...else
  64. case n > 0 && n < 10:
  65. fmt.Println("i > 0 and i < 10")
  66. case n > 10 && n < 20:
  67. fmt.Println("i > 10 and i < 20")
  68. default:
  69. fmt.Println("def")
  70. }
  71. }

以上代码执行结果为:

    x 的类型 :<nil>
    fallthrough
    1
    1
    def

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号