語句 |
舉例 |
if a < 20 { /* 如果條件爲 true 則執行以下語句 */ fmt.Printf("a 小於 20\n" ) } |
|
/* 判斷布爾表達式 */ if a < 20 { /* 如果條件爲 true 則執行以下語句 */ fmt.Printf("a 小於 20\n" ); } else { /* 如果條件爲 false 則執行以下語句 */ fmt.Printf("a 不小於 20\n" ); } |
|
if a == 100 { /* if 條件語句爲 true 執行 */ if b == 200 { /* if 條件語句爲 true 執行 */ fmt.Printf("a 的值爲 100 , b 的值爲 200\n" ); } } |
|
switch var1 { case val1: ... case val2: ... default: ... } 變量 var1 可以是任何類型,而 val1 和 val2 則可以是同類型的任意值。類型不被侷限於常量或整數,但必須是相同的類型;或者最終結果爲相同類型的表達式。
您可以同時測試多個可能符合條件的值,使用逗號分割它們,例如:case val1, val2, val3。 Type Switch: switch 語句還可以被用於 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。
Type Switch 語法格式如下:
switch x.(type){ case type: statement(s); case type: statement(s); /* 你可以定義任意個數的case */ default: /* 可選 */ statement(s); } fallthrough: 使用 fallthrough 會強制執行後面的 case 語句,fallthrough 不會判斷下一條 case 的表達式結果是否爲 true。用代碼示例體會下: package main
import "fmt"
func main() {
switch { case false: fmt.Println("1、case 條件語句爲 false") fallthrough case true: fmt.Println("2、case 條件語句爲 true") fallthrough case false: fmt.Println("3、case 條件語句爲 false") fallthrough case true: fmt.Println("4、case 條件語句爲 true") case false: fmt.Println("5、case 條件語句爲 false") fallthrough default: fmt.Println("6、默認 case") } } 輸出結果爲: 2、case 條件語句爲 true 3、case 條件語句爲 false 4、case 條件語句爲 true 從以上代碼輸出的結果可以看出:switch 從第一個判斷表達式爲 true 的 case 開始執行,如果 case 帶有 fallthrough,程序會繼續執行下一條 case,且它不會去判斷下一個 case 的表達式是否爲 true。 |
|
select 是 Go 中的一個控制結構,類似於用於通信的 switch 語句。每個 case 必須是一個通信操作,要麼是發送要麼是接收。
select 隨機執行一個可運行的 case。如果沒有 case 可運行,它將阻塞,直到有 case 可運行。一個默認的子句應該總是可運行的。 語法如下: select { case communication clause : statement(s); case communication clause : statement(s); /* 你可以定義任意數量的 case */ default : /* 可選 */ statement(s); } 以下描述了 select 語句的語法:
每個 case 都必須是一個通信 所有 channel 表達式都會被求值 所有被髮送的表達式都會被求值 如果任意某個通信可以進行,它就執行,其他被忽略。 如果有多個 case 都可以運行,Select 會隨機公平地選出一個執行。其他不會執行。 否則: 如果有 default 子句,則執行該語句。 如果沒有 default 子句,select 將阻塞,直到某個通信可以運行;Go 不會重新對 channel 或值進行求值。 最好還是跑一個示例: package main
import "fmt"
func main() { var c1, c2, c3 chan int var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } } |
Go語言中循環採用for語句(沒有while,for替代),有如下三種定義方式:
1. for init; condition; post { }
init爲初始條件;condition: 關係表達式或邏輯表達式,循環控制條件;post: 一般爲賦值表達式,給控制變量增量或減量
2. for condition { }
同C語言的while語句一樣
3.for { }
死循環,同for(;;)
另外,可以採用for循環的range格式對slice、map、數組和字符串等進行循環遍歷,如
for key, value := range oldMap {
newMap[key] = value
}
break、continue、goto的用法同c語言