golang經常使用手冊:運算符、條件語句、循環語句

其實和不少語言都是相似的,go語言也是有運算符、條件語句和循環語句。數組

運算符(這一點和c相同)post

Go 語言內置的運算符:ui

  • 算術運算符
    • +、-、*、/、%、++、--
  • 關係運算符
    • ==、!=、>、<、>=、<=、
  • 邏輯運算符
    • &&、||、!
  • 位運算符
    • &、|、^
  • 賦值運算符
    • =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、!=
  • 其餘運算符
    • &(取地址)、*(指針取值)

固然,運算符也是有優先級的。spa

條件語句指針

正如其餘語言,go中也存在一下條件語句:code

  • if
  • if ··· else
  • if ··· else if ··· else
  • if (if ··· [(else if)、(if)])
  • switch () { case value1: ··· [fallthrough] ··· }
  • select

注意,在這裏咱們除了常規的if語句操做相同之外,其餘都是相似。字符串

switch注意點以下:string

  • 左花括號{必須與switch處於同一行
  • 條件表達式不限制爲常量或者整數
  • 單個case中,能夠出現多個結果選項
  • 與C語言等規則相反,Go語言不須要用break來明確退出一個case
  • 只有在case中明確添加fallthrough關鍵字,纔會繼續執行緊跟的下一個case
  • 能夠不設定switch以後的條件表達式,在此種狀況下,整個switch結構與多個if...else...的邏輯做用等同

select注意點以下:it

  • elect 的代碼形式和 switch 很是類似
  • 每一個case都必須是一個通訊
  • 全部channel表達式都會被求值
  • 全部被髮送的表達式都會被求值
  • 若是任意某個通訊能夠進行,它就執行;其餘被忽略。不然以下:
  • 若是有多個case均可以運行,Select會隨機公平地選出一個執行。
    • 若是有default子句,則執行該語句。
    • 若是沒有default字句,select將阻塞,直到某個通訊能夠運行;Go不會從新對channel或值進行求值。

選擇語句io

  • for init; condition; post { } (和 C 語言的 通常for 同樣)
  • for condition { } (和 C 的 while 同樣)
  • for { } ==> (跟C語言for(;;){} 相同)
    • init: 通常爲賦值表達式,給控制變量賦初值;
    • condition: 關係表達式或邏輯表達式,循環控制條件;
    • post: 通常爲賦值表達式,給控制變量增量或減量。
  • for 循環的 range 格式能夠對 slice、map、數組、字符串等進行迭代循環。
    • for key, value := range oldMap { newMap[key] = value }

注意,for循環條件控制器是無需括號的,循環體須要花括號包裹,循環變量、循環調教、循環變量變化量之間用 ; 分割。

demo以下:

package main

//導包
import (
	"fmt"
)

func main() {
	numbers := [6]int{1, 2, 3, 5}
	for i := range numbers {
		fmt.Printf("第 %d 位 x 的值 = %d\n", i, numbers[i])
	}

	fmt.Println("====我是分割線====")

	for i, x := range numbers {
		fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
	}

	fmt.Println("====我是分割線====")

	for a := 0; a < len(numbers); a++ {
		fmt.Printf("第 %d 位 x 的值 = %d\n", a, numbers[a])
	}
}
複製代碼

固然咱們可以小小的推測一下結果,這裏直接貼出結果以下:

第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
====我是分割線====
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
====我是分割線====
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
複製代碼

固然,咱們說到循環,不得不提一下循環控制語句,以下:

  • break
  • continue
  • goto

值得一提的是,break和continue都和其餘語言中的用法相似。可是個別一些語言中不存在goto或者不多使用。goto示例以下:

/* 定義局部變量 */
   var a int = 10

   /* 循環 */
   LOOP: for a < 20 {
      if a == 15 {
         /* 跳過迭代 */
         a = a + 1
         goto LOOP
      }
      fmt.Printf("a的值爲 : %d\n", a)
      a++     
   }
複製代碼

運行結果以下:

a的值爲 : 10
a的值爲 : 11
a的值爲 : 12
a的值爲 : 13
a的值爲 : 14
a的值爲 : 16
a的值爲 : 17
a的值爲 : 18
a的值爲 : 19
複製代碼

咱們簡易的看一下goto語法:label: statement; ··· goto label

也就是說咱們給某處語句打上 label 標籤,使用goto則會跳轉到該語句。

總結:

  • 運算符和其餘語言同樣沒什麼區別
  • 條件語句中多出一個值得注意的select語句,且主要用於io操做中
  • 循環語句也和其餘語言相似,須要注意的是goto語句須要配合標籤一塊兒使用
相關文章
相關標籤/搜索