天天看點

Go語言學習筆記五: 條件語句

Go語言學習筆記五: 條件語句

if語句

if 布爾表達式 {
   /* 在布爾表達式為 true 時執行 */
}
           

竟然沒有括号,和python很像。但是有大括号,與python又不一樣。

例子:

package main

import "fmt"

func main() {
   var a int = 1
   if a < 2 {
       fmt.Printf("a < 2\n" )
   }
   fmt.Printf("a = %d\n", a)
}
           

if..else語句

if 布爾表達式 {
   /* 在布爾表達式為 true 時執行 */
} else {
  /* 在布爾表達式為 false 時執行 */
}
           

if..else if..else 語句嵌套

if score >= 90 {
    fmt.Println("優秀")
} else if score >= 70 {
    fmt.Println("良好")
} else if score >= 60 {
    fmt.Println("一般")
} else {
    fmt.Println("差")
}
           

if 語句嵌套

if 布爾表達式 1 {
   /* 在布爾表達式 1 為 true 時執行 */
   if 布爾表達式 2 {
      /* 在布爾表達式 2 為 true 時執行 */
   }
}
           

switch 語句

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

Type Switch

switch 語句還可以被用于 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。

switch x.(type){
    case type1:
       statement1    
    case type2:
       statement2 
    default: /* 可選 */
       statement3;
}
           

select語句

select 語句類似于switch語句,但是select會随機執行一個可運作的case。如果沒有case可運作,它将阻塞,直到有case可運作。

這個東西我還真沒有在其他語言裡面看到過(可能是我了解的太少)。

select {
    case communication clause  :
       statement1;      
    case communication clause  :
       statement2; 
    /* 你可以定義任意數量的 case */
    default : /* 可選 */
       statement3;
}
           
  • 每個case都必須是一個通信
  • 所有channel表達式都會被求值
  • 所有被發送的表達式都會被求值
  • 如果任意某個通信可以進行,它就執行;其他被忽略。
  • 如果有多個case都可以運作,Select會随機公平地選出一個執行。其他不會執行。
  • 否則:如果有default子句,則執行該語句。如果沒有default字句,select将阻塞,直到某個通信可以運作;Go不會重新對channel或值進行求值。

學習這個需要先學習channel。我channel還不會呢,先不深入看這個了。

此系列其他文章位址

https://github.com/zhangqunshi/golang_study