這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
條件陳述式
if ... else if ... else 語句,如:
if num > 100{ fmt.Println(">100") } else if 0 < num { fmt.Println("<0")} else { fmt.Println("0<<num<<100")}
迴圈語句
GO語言中的 switch 語句分為兩種,一種是運算式 switch 語句,和其它語言中的 switch 使用方法相同;另一種是類型判斷 switch 語句,它類似於類型斷言,但使用 type 關鍵字來充當被判斷的類型。
運算式 switch 樣本如下:
//運算式 switch switch content := getContent(); content { default: fmt.Println("Unknow language") case "Lua": break case "Python": fmt.Println("python") case "C", "C++", "Java": fmt.Println("A compiled language") }
類型判斷 switch 語句樣本如下:
v := "3" switch interface{}(v).(type) { case string: log.Printf("Thie string is '%s'.\n", v) case int, uint, int8, uint8, int16, uint16: log.Printf("Thie integer is %d.\n", v) default: log.Printf("Unsupported value.(type=%T)\n", v) }
此外,switch 語句還可以實現串聯 if 語句的替代方案,可以使代碼看起來更清晰易讀,在 switch 運算式缺失的情況下, switch 判定目標會被視為布爾類型,第一個返回 true 的 case 運算式將會被執行,如:
switch { case num > 100: log.Println(">100") case num < 0: log.Println("<0") default: log.Println("0<<num<<100") }
for語句有三種用法,一是常規用法,結構先後是初始化子句、條件、後置子句,如:
sum := 0 for i := 0; i < 100; i++ { sum += i }
二是類似其它語言中 while 的作用,注意GO語言中沒有while迴圈,如:
i := 0 for i < 100 { i += 2 }
三是類似其它語言中 foreach 的作用,用來迭代數組和字典等類型,如:
m := map[string]int{"A": 1, "B": 2} for k, _ := range m { log.Print(k) }
注意:if/for/switch 語句都可以接受一個可選的初始化子句; break\continue\goto 語句都可以跳轉到指定標記,標記的定義使用 "標識符:" 的形式。
goto語句
goto語句只能配合標記來執行,跳轉到指定位置,該語句在其它語言中很有爭議,一般為了代碼可讀性都不推薦使用。
defer語句
GO語言特有的一個流程式控制制語句,它用來預定對一個函數的調用。它只能出現在一個函數中(假設是A函數),且只能調用另一個函數(假設是B函數),意味著在A函數結束返回時,延遲調用B函數,一般用於開啟檔案時的資源清理等工作。如果一個函數內部調用多個 defer 語句,則遵循後進先出的原則。defer 語句後面可以跟著匿名函數,來快速實現一些臨時的功能。defer 調用的函數可以使用的變數,可以是通過參數傳進來的,也可以是上下文中可以調用的變數,如果是傳參進來的,則會立即被求值,如果是上下文中的變數,則不會立即被求值,而是取在 defer 函數調用時的值,這一點要注意。
異常處理語句
switch 語句