Go語(yǔ)言學(xué)習(xí)筆記 - 表達(dá)式

Golang關(guān)鍵字

break case chan const continus default defer else fallthrough for func go goto
if import interface map package range return select struct switch type var

Goang運(yùn)算符

不支支持運(yùn)算符重載。尤其需要注意,"++"、"--" 是語(yǔ)句而而非非表達(dá)式。

+  &  +=  &=  &&  ==  !=  (  )
-  |  -=  |=  ||  <  <=  [  ]
*  ^  *=  ^=  <-  >  >=  {  }
/  <<  /=  <<=  ++  =  :=  ,  ;
%  >>  %=  >>=  --  !  ...  .  :
&^  &^=

控制流

x := 0
if n := "abc"; x > 0 {// 初始化語(yǔ)句未必就是定義變量,比如 println("init") 也是可以的。
    println(n[2])
} else if x < 0 {// 注意 else if 和 else 左大大括號(hào)位置。
    println(n[1])
} else {
    println(n[0])
} 

循環(huán)

支支持三種循環(huán)方方式,包括類(lèi) while 語(yǔ)法。

s := "abc"
for i, n := 0, len(s); i < n; i++ {// 常見(jiàn)的 for 循環(huán),支持初始化語(yǔ)句。
    println(s[i])
}
n := len(s)
for n > 0 {// 替代 while (n > 0) {}
    println(s[n])// 替代 for (; n > 0;) {}
    n--
}
for {// 替代 while (true) {}
    println(s)// 替代 for (;;) {}
}

Rang

類(lèi)似迭代器操作,返回 (索引, 值) 或 (鍵, 值)。

            1st  value      2nd  value
------------------+-------------------+------------------+-------------------
string          index          s[index]    unicode,    rune
array/slice       index          s[index]
map            key           m[key]
channel         element

可忽略不想要的返回值,或用 "_" 這個(gè)特殊變量。

s := "abc"
for i := range s {// 忽略 2nd value,支支持 string/array/slice/map。
    println(s[i])
}
for _, c := range s {// 忽略 index。
    println(c)
}
for range s {// 忽略全部返回值,僅迭代。
    ...
}
m := map[string]int{"a": 1, "b": 2}
for k, v := range m {// 返回 (key, value)。
    println(k, v)
}

Switch

分支表達(dá)式可以是任意類(lèi)型,不限于常量??墒÷?break,默認(rèn)自動(dòng)終止。

x := []int{1, 2, 3}
i := 2
switch i {
  case x[1]:
    println("a")
  case 1, 3:
    println("b")
  default:
    println("c")
}

如需要繼續(xù)下一分支,可使用 fallthrough,但不再判斷條件。省略條件表達(dá)式,可當(dāng) if...else if...else 使用。

Goto,Break,Continue

支持在函數(shù)內(nèi) goto 跳轉(zhuǎn)。標(biāo)簽名區(qū)分大小寫(xiě),未使用標(biāo)簽引發(fā)錯(cuò)誤。配合標(biāo)簽,break 和 continue 可在多級(jí)嵌套循環(huán)中跳出。

func main() {
L1:
  for x := 0; x < 3; x++ {
  L2:
    for y := 0; y < 5; y++ {
      if y > 2 { continue L2 }
      if x > 1 { break L1 }
        print(x, ":", y, " ")
    }
    println()
  }
}

附:break 可用于 for、switch、select,而 continue 僅能用于 for 循環(huán)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫(xiě)在分支后用逗號(hào)分開(kāi)。如果任何模式...
    無(wú)灃閱讀 1,568評(píng)論 1 5
  • 有什么東西,在心里,應(yīng)時(shí)常記起,卻沒(méi)記起。在活著,跳動(dòng)著,卻會(huì)偶爾失去記憶。 還以為,已經(jīng)忘記,其實(shí)發(fā)現(xiàn),它在那里...
    天然愛(ài)蘇三閱讀 300評(píng)論 0 2
  • 2018考研雖還沒(méi)正式開(kāi),但是考研大戰(zhàn)已經(jīng)悄悄拉開(kāi)了帷幕。目前有些同學(xué)已經(jīng)開(kāi)始準(zhǔn)備復(fù)習(xí)了,但是困擾著這些同學(xué)們的第...
    檸就是萌閱讀 417評(píng)論 0 2
  • 你要感謝生命的每次不期而遇 相遇便是緣分 何況溫柔對(duì)你 珍惜
    無(wú)恙大俠閱讀 145評(píng)論 0 0
  • 這是一部可以誘惑人在跑步機(jī)上待一小時(shí)的電影。 顏值高。最帥當(dāng)屬任達(dá)華,風(fēng)度沉穩(wěn);最美的是李心潔,五官立體眼睛深邃;...
    綠玉閱讀 727評(píng)論 0 1

友情鏈接更多精彩內(nèi)容