golang學習筆記8:控制結構
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, okbool){
iff <0 { return } // error case
return math.Sqrt(f),true}
func main(){
t, ok := mySqrt(25.0)
if ok { fmt.Println(t) }
}
switch 結構
package main
import "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 main
import "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
}
