流程控制詳解
導讀 | 除此之外,還有 break 和 continue,都可以搭配迴圈語句和跳轉語句使用。跳轉語句在某些場景下會非常實用,但也很容易出現一些莫名其妙的問題,所以使用起來要更謹慎些。 |
if-else
if-else特點:
- 條件語句不需要使用小括號()包起來;
- 花括號{}必須有,並且左花括號{必須和if或else在同一行;
- 在if之後,條件語句之前可以新增變數初始化語句,使用;分隔。
package main import "fmt" func main() { if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") // 7 is odd } if 8%4 == 0 { fmt.Println("8 is divisible by 4") // 8 is divisible by 4 } if num := 9; num < 0 { fmt.Println(num, "is negative") } else if num < 10 { fmt.Println(num, "has 1 digit") // 9 has 1 digit } else { fmt.Println(num, "has multiple digits") } }
switch
switch特點:
- 左花括號 { 必須和 switch 在同一行;
- 條件表示式不限制常量或者整數;
- switch 後可新增變數初始化語句,使用 ; 分割;
- 可以不設定條件表示式,在此種情況下,整個 switch 結構與多個 if-else 的邏輯作用等同;
- 單個 case 中可以出現多個結果選項;
- 在 case 中新增 fallthrough 關鍵字,會繼續執行緊跟的下一個 case,不需要判斷 case 的條件語句;
- switch 支援 default 語句,當所有 case 都不滿足時,執行 default 語句。
package main import ( "fmt" "time" ) func main() { i := 2 fmt.Print("write ", i, " as ") switch i { case 1: fmt.Println("one") case 2: fmt.Println("two") // write 2 as two fallthrough case 3: fmt.Println("three") // three case 4, 5, 6: fmt.Println("four, five, six") } switch num := 9; num { case 1: fmt.Println("one") default: fmt.Println("nine") // nine } switch time.Now().Weekday() { case time.Saturday, time.Sunday: fmt.Println("it's the weekend") default: fmt.Println("it's a weekday") // it's a weekday } t := time.Now() switch { case t.Hour() < 12: fmt.Println("it's before noon") default: fmt.Println("it's after noon") // it's after noon } }
for
for特點:
- 條件表示式不需要使用小括號 () 包起來;
- 花括號 {} 必須有,並且左花括號 { 必須和 for 在同一行;
- 支援 continue 和 break。
package main import ( "fmt" ) func main() { i := 1 // 只有條件 for i <= 3 { fmt.Println(i) i = i + 1 } // 有變數初始化和條件 for j := 7; j <= 9; j++ { fmt.Println(j) } // 死迴圈 for { fmt.Println("loop") break } // 遍歷陣列 a := [...]int{10, 20, 30, 40} for i := range a { fmt.Println(i) } for i, v := range a { fmt.Println(i, v) } // 遍歷切片 s := []string{"a", "b", "c"} for i := range s { fmt.Println(i) } for i, v := range s { fmt.Println(i, v) } // 遍歷字典 m := map[string]int{"a": 10, "b": 20, "c": 30} for k := range m { fmt.Println(k) } for k, v := range m { fmt.Println(k, v) } }
goto,break,continue
goto 特點:
- 只能在函式內跳轉,需要配合標籤一起使用;
- 不能跳過內部變數宣告語句;
- 只能跳到同級作用域或者上層作用域內,不能跳到內部作用域內。
package main import ( "fmt" ) func main() { // 跳出迴圈 for i := 0; ; i++ { if i == 2 { goto L1 } fmt.Println(i) } L1: fmt.Println("Done") // 跳過變數宣告,不允許 // goto L2 // j := 1 // L2: }
break 特點:
- 單獨使用,用於跳出 break 當前所在的 for、 switch、 select 語句的執行;
- 和標籤一起使用,用於跳出標籤所標識的 for、 switch、 select 語句的執行,可用於跳出多重迴圈,但標籤和 break 必須在同一個函式內。
package main import ( "fmt" ) func main() { // break 跳轉到標籤處,然後跳過 for 迴圈 L3: for i := 0; ; i++ { for j := 0; ; j++ { if i >= 2 { break L3 } if j > 4 { break } fmt.Println(i, j) } } }
continue 特點:
- 單獨使用,用於跳出 continue 當前所在的 for 迴圈的本次迭代;
- 和標籤一起使用,用於跳出標籤所標識的 for 語句的本次選代,但標籤和 continue 必須在同一個函式內。
package main import ( "fmt" ) func main() { // continue 跳轉到標籤處,然後執行 i++ L4: for i := 0; ; i++ { for j := 0; j < 6; j++ { if i > 4 { break L4 } if i >= 2 { continue L4 } if j > 4 { continue } fmt.Println(i, j) } } }
總結
本文主要介紹了流程控制語句,分別是條件語句,選擇語句,迴圈語句和跳轉語句。
- 條件語句: 對應關鍵詞 if,else 和 else if;
- 選擇語句: 對應關鍵詞 switch,case,fallthrough 和 default;
- 迴圈語句: 對應關鍵詞 for 和 range;
- 跳轉語句: 對應關鍵詞 goto。
除此之外,還有 break 和 continue,都可以搭配迴圈語句和跳轉語句使用。跳轉語句在某些場景下會非常實用,但也很容易出現一些莫名其妙的問題,所以使用起來要更謹慎些。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2787260/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python流程控制語句詳解Python
- Lua流程控制語句if else的使用詳解
- Git協作流程詳解Git
- PID 控制詳解
- CSS流程分步程式碼詳解CSS
- Linux開機流程詳解Linux
- springMVC請求流程詳解SpringMVC
- Chrome控制檯使用詳解Chrome
- Firebug控制檯詳解
- 控制檔案詳解(轉)
- Java控制流程Java
- 流程控制
- awk 流程控制語句(if,for,while,do)詳細介紹While
- webpack loader配置全流程詳解Web
- 【zookeeper原始碼】啟動流程詳解原始碼
- 詳解SSH 框架中物件呼叫流程框架物件
- JuiceFS 資料讀寫流程詳解UI
- 基礎控制元件詳解控制元件
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- PHP流程控制PHP
- Practice| 流程控制
- Bash流程控制
- 五、流程控制
- Java流程控制Java
- Javascript 流程控制JavaScript
- Rust 流程控制Rust
- 12、流程控制
- 流程控制语句
- shell流程控制
- shiro登陸流程原始碼詳解原始碼
- View的繪製-measure流程詳解View
- K8s工作流程詳解K8S
- 詳解 OpenGL ES 2.x 渲染流程
- SpringSecurity認證流程原始碼詳解SpringGse原始碼
- 樹莓派入門操作流程詳解樹莓派
- Spark開發-WordCount流程詳細講解Spark
- hive初始化、處理流程詳解Hive
- Jmeter系列(50)- 詳解 If 控制器JMeter