golang基礎--控制語句

來源:互聯網
上載者:User

go基礎之控制語句

補充知識

  • 指標
    • 與其他語言不同,在Go中不支援指標運算即->運算子,而直接採用.選擇符來操作指標目標對象的成員。
  • 操作符&取變數的地址,使用*通過指標間間接訪問目標對象
  • 預設值位nil,而非NULL
  • 執行個體代碼如下

    //指標的使用package mainimport "fmt"func main() {    a := 1          //定義一個變數,類型位int    a++             //必須單獨放一行    var p *int = &a // 指標p指向a的記憶體位址    fmt.Println(p)  //訪問p    fmt.Println(*p) //取p記憶體位址指向的值}

    運行結果
    shell 0xc04200e0b8 //記憶體位址 2 //地址指向的值

判斷if控制語句

  • 條件運算式沒有括弧

  • 支援一個初始設定式(可以是並行的方式)

  • 左側的大括弧和條件陳述式或else在同一行

  • 支援當行模式

  • 初始化語句中的變數為block層級,同時穎倉外部同名變數
    eg1:

    //if語句:初始化語句a :1package mainimport (    "fmt")func main() {    a := 10    if a := 1; a > 0 {    //此時a是局部變數,範圍只在if語句內        fmt.Println(a)       }    fmt.Println(a)}

    eg2:

    //if..else語句:同時判斷兩種情況package mainimport  "fmt"func main() {    a := 10    if a, b := 1, 2; a > 1 {        fmt.Println(a)    } else {        fmt.Println(b)    }    fmt.Println(a)} /*output210*/

for 迴圈語句

  • go只有for一個迴圈語句關鍵字,但支援3種形式
  • 初始化和進步運算式可以是多個值
  • 條件陳述式每次迴圈都會被重新檢查,因此不建議在條件陳述式中使用函數,盡量提前計算好條件並以變數或常量代替
  • 左側大括弧必須和條件陳述式在同一行
    eg1: 無限循環

      // for語句:正常迴圈  package main  import (      "fmt"  )  func main() {      a := 1      for {          a++          if a > 10 {              break          }          fmt.Println(a)      }      fmt.Println("over")  }

    eg2:for 接條件運算式

       //for 條件運算式package mainimport (   "fmt")func main() {   a := 1   for a < 3 { //條件運算式       a++       fmt.Println(a)   }   fmt.Println("over")}

    eg3:最常見

    //for :步進運算式,最常見package mainimport (    "fmt")func main() {    a := 1    for i := 0; i < 3; i++ { //步進設定:當i<3時,控制a        a++        fmt.Println(a)    }    fmt.Println("over")}

    注意: for 迴圈中聲明的變數在每次迴圈結束後都會消失,範圍只在當此迴圈中有效

    package mainimport "fmt"func main() {for i := 0; i < 3; i++ {    a := 1    fmt.Println(&a) //輸出a的記憶體位址}}/*輸出0xc04204a0800xc04204a0880xc04204a0b0*/

選擇語句switch

  • 可以使用任何類型或運算式作為條件陳述式
  • 不需要寫break,一旦條件符合自動終止
  • 如希望繼續執行下一個case,需要使用fallthrough關鍵詞
  • 支援一個初始設定式(可以時並行方式),右側需跟分號
  • 左側大括弧必須和條件陳述式在同一行

  • eg1: 最經典用法

    /*檢查a:如果a=0;輸出a =0;如果a=1;輸出a=1;...如果條件都不滿足:預設輸出None*/package mainimport (    "fmt")func main() {    a := 1    switch a {    case 0:        fmt.Println("a=0")    case 1:        fmt.Println("a=1")    default:        fmt.Println("None")    }}
  • eg2:條件同時滿足多個條件,使用關鍵詞fallthrough

    /*同時滿足多種情況,使用關鍵詞fallthrough*/package mainimport "fmt"func main() {    a := 1    switch {    case a >= 0:        fmt.Println("a=0")        fallthrough //fallthrough用法,類似於elif    case a >= 1:        fmt.Println("a=1")    default:        fmt.Println("None")    }}
  • eg3: swith後跟初始化語句

    /*swtich後面跟初始化語句: 初始化語句中的變數範圍在switch語句中*/package mainimport "fmt"func main() {    switch a := 1; {    case a >= 0:        fmt.Println("a=0")        fallthrough //fallthrough用法,類似於elif    case a >= 1:        fmt.Println("a=1")    default:        fmt.Println("None")    }}

    跳躍陳述式goto,break,continue

  • 三個文法都可以配合標籤使用
  • 標籤名區分大小寫,若不使用會造成編譯錯誤
  • Break與continue配合標籤可用於多層迴圈的跳出
  • Goto是調整執行位置,與其它2個語句配合標籤的結果並不相同

  • eg1:break語句

    //break跳躍陳述式,可以跳轉出多存迴圈package mainimport "fmt"func main() {LABEL1: //定義標籤   for { //這是一個無線迴圈       for i := 0; i < 10; i++ { //有限迴圈           print(i)  //迴圈四遍跳出迴圈           if i > 3 {               fmt.Println("OK")               break LABEL1 //直接跳出N層迴圈           }       }   }   fmt.Println("OK")}
  • eg2: goto語句,調到某個迴圈,繼續執行

    package mainimport  "fmt"func main() {    for {                           //這是一個無線迴圈        for i := 0; i < 10; i++ {    //有限迴圈            if i > 3 {                goto LABEL1         //返回到LABEL1層繼續執行            }        }    }LABEL1: //使用goto跳轉的話,盡量將標籤放goto語句之後    fmt.Println("OK")}
  • eg3 : Continue語句,內部for每迴圈遇到Continue後,返回LABEL1

    // continue語句package mainimport "fmt"func main() {LABEL1:   for i := 0; i < 10; i++ { //有限迴圈       for { //無限迴圈           fmt.Println(i)           continue LABEL1     // 遇到LABEL1後,不會繼續執行,而是跳到同層級           fmt.Println("here") //永遠不會執行這項操作       }   }   fmt.Println("OK")   //迴圈十次,最後執行}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.