if-else 結構
if condition1 { // do something} else if condition2 { // do something else} else { // catch-all or default}
關鍵字 if 和 else 之後的左大括號 { 必須和關鍵字在同一行,如果你使用了 else-if 結構,則前段代碼塊的右大括號 } 必須和 else-if 關鍵字在同一行。這兩條規則都是被編譯器強制規定的。
多返回值函數
func mySqrt(f float64) (v float64, ok bool) { if f < 0 { return } // error case return math.Sqrt(f),true} func main() { t, ok := mySqrt(25.0) if ok { fmt.Println(t) } }
switch 結構
package mainimport "fmt"func main() { var num1 int = 100 switch num1 { case 98, 99: fmt.Println("It's equal to 98") case 100: fmt.Println("It's equal to 100") default: fmt.Println("It's not equal to 98 or 100") } }
輸出:It's equal to 100
如果在執行完每個分支的代碼後,還希望繼續執行後續分支的代碼,可以使用 fallthrough 關鍵字來達到目的。
可選的 default 分支可以出現在任何順序,但最好將它放在最後。它的作用類似與 if-else 語句中的 else,表示不符合任何已給出條件時,執行相關語句。
switch 語句的還可以包含一個初始化語句。
在下面這個代碼片段中,變量 a 和 b 被平行初始化,然後作爲判斷條件:
switch a, b := x[i], y[j]; { case a < b: t = -1 case a == b: t = 0 case a > b: t = 1 }
for結構
package mainimport "fmt"func main() { for i := 0; i < 5; i++ { fmt.Printf("This is the %d iteration\n", i) } }
Break 與 continue
一個 break 的作用範圍爲該語句出現後的最內部的結構,它可以被用於任何形式的 for 循環(計數器、條件判斷等)。但在 switch 或 select 語句中,break 語句的作用結果是跳過整個代碼塊,執行後續的代碼。 關鍵字 continue 忽略剩餘的循環體而直接進入下一次循環的過程,但不是無條件執行下一次循環,執行之前依舊需要滿足循環的判斷條件。 另外,關鍵字 continue 只能被用於 for 循環中。
標籤與 goto
for、switch 或 select 語句都可以配合標籤(label)形式的標識符使用,即某一行第一個以冒號(:)結尾的單詞(gofmt 會將後續代碼自動移至下一行)。
(標籤的名稱是大小寫敏感的,爲了提升可讀性,一般建議使用全部大寫字母)
package main import "fmt" func main() { LABEL1: for i := 0; i <= 5; i++ { for j := 0; j <= 5; j++ { if j == 4 { continue LABEL1 } fmt.Printf("i is: %d, and j is: %d\n", i, j) } } }
本例中,continue 語句指向 LABEL1,當執行到該語句的時候,就會跳轉到 LABEL1 標籤的位置。
您可以看到當 j==4 和 j==5 的時候,沒有任何輸出:標籤的作用對象爲外部循環,因此 i 會直接變成下一個循環的值,而此時 j 的值就被重設爲 0,即它的初始值。如果將 continue 改爲 break,則不會只退出內層循環,而是直接退出外層循環了。另外,還可以使用 goto 語句和標籤配合使用來模擬循環。
package main func main() { i:=0 HERE: print(i) i++ if i==5 { return } goto HERE }