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運算符
不支支持運算符重載。尤其需要注意,"++"蚂子、"--" 是語句而而非非表達式。
+ & += &= && == != ( )
- | -= |= || < <= [ ]
* ^ *= ^= <- > >= { }
/ << /= <<= ++ = := , ;
% >> %= >>= -- ! ... . :
&^ &^=
控制流
x := 0
if n := "abc"; x > 0 {// 初始化語句未必就是定義變量,比如 println("init") 也是可以的缭黔。
println(n[2])
} else if x < 0 {// 注意 else if 和 else 左大大括號位置缆镣。
println(n[1])
} else {
println(n[0])
}
循環(huán)
支支持三種循環(huán)方方式,包括類 while 語法。
s := "abc"
for i, n := 0, len(s); i < n; i++ {// 常見的 for 循環(huán),支持初始化語句试浙。
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
類似迭代器操作,返回 (索引, 值) 或 (鍵, 值)董瞻。
1st value 2nd value
------------------+-------------------+------------------+-------------------
string index s[index] unicode, rune
array/slice index s[index]
map key m[key]
channel element
可忽略不想要的返回值,或用 "_" 這個特殊變量。
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
分支表達式可以是任意類型,不限于常量抄伍∷腋眨可省略 break,默認自動終止。
x := []int{1, 2, 3}
i := 2
switch i {
case x[1]:
println("a")
case 1, 3:
println("b")
default:
println("c")
}
如需要繼續(xù)下一分支,可使用 fallthrough,但不再判斷條件截珍。省略條件表達式,可當 if...else if...else 使用攀甚。
Goto,Break,Continue
支持在函數(shù)內(nèi) goto 跳轉(zhuǎn)。標簽名區(qū)分大小寫,未使用標簽引發(fā)錯誤岗喉。配合標簽,break 和 continue 可在多級嵌套循環(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)荚斯。