Go语言学习笔记 - 表达式

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 循环。

你可能感兴趣的:(Go语言学习笔记 - 表达式)