Go語言學習筆記——流程控制

分支

if語句

  一般用法與C語言類似,但是判斷表達式不用加括號

var a int
if a < 4 {
   a++
} else if a == 4 {
   a--
} else {
   a *= 2
}

特殊寫法

  在判斷條件表達式前,可以加額外的語句

if b := a * 2; b < 10{
   fmt.Println(b)
}

  這樣寫的好處是對於塊作用域,變量作用的範圍更小

switch語句

  在Go中,switch case語句的條件比C更加靈活方便,case值不侷限於整數

var a int
switch a{
case 2:
   fmt.Println(a)
case 3, 4, 5, 6, 7:
   fmt.Println(a)
default:
   fmt.Println(a)
}

  Go中不需要用break說明一個分支結束,如果多個分支使用同一處理,可以寫在一個表達式中

  還可以將多個if else的結構寫成swich語句

var a int
switch {
case a < 10:
   fmt.Println(a)
case a > 10 && a < 20, a > 50 && a < 60:
   fmt.Println(a)
default:
   fmt.Println(a)
}

循環

for循環

  Go中沒有while關鍵字,只有for

  幾種常用寫法

var a int
//死循環
for {
   a++
}
//判斷條件循環
for a < 10 {
   fmt.Println(a)
}
//固定次數循環
for i := 0; i < 10; i++ {
   fmt.Println(i)
}

  breakcontinue關鍵字功能與其他語言相同

  gotoreturnpanic語句也可以推出循環

for range循環

  對可迭代數據的循環,類似於C++的for( : ),Python的for in

遍歷切片、數組、字符串

  單個左值是索引,兩個左值分別是索引和值

for index, value := range s {
   fmt.Println(index, value)
}

遍歷map

  單個左值是key,兩個分別是key和value

var m = map[string]int{
   "hello": 123,
   "world": 321,
}
for key := range m {
   fmt.Println(key)
}
for key, value := range m {
   fmt.Println(key, value)
}

遍歷通道

c := make(chan int)
for msg := range c{
   fmt.Println(msg)
}

  從通道中不斷獲取數據

跳轉

  使用標籤標記代碼塊,再配合使用gotobreakcontinue進行跳轉

break label

loop:
   for {
      for{
         break loop
      }
      fmt.Println("outer loop")
   }
   fmt.Println("outside")
//結果只打印 outside

  使用break label,直接跳出兩層循環

continue label

loop:
   for {
      fmt.Println("outer loop")
      for{
         continue loop
      }
   }
//結果一直打印 outer loop

  使用continue label,回到外層循環開頭

  break和continue後面接label只能接定義在forswitchselect代碼塊前一行的lebel

goto label

  goto是無條件跳轉,可以跳轉到任意label,高級語言中不推薦使用

	 for {
      for {
         goto exit
      }
   }
exit:
   fmt.Println("outside")

參考資料

《Go語言從入門到進階實戰》第四章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章