Golang关键字
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])
}
循环
支支持三种循环方方式,包括类 while 语法。
s := "abc"
for i, n := 0, len(s); i < n; i++ {// 常见的 for 循环,支持初始化语句。
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")
}
如需要继续下一分支,可使用 fallthrough,但不再判断条件。省略条件表达式,可当 if...else if...else 使用。
Goto,Break,Continue
支持在函数内 goto 跳转。标签名区分大小写,未使用标签引发错误。配合标签,break 和 continue 可在多级嵌套循环中跳出。
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 循环。