雨痕 Go语言学习笔记-表达式

保留字

运算符

  • +=,-=,*=,/=,%=
  • ++,--,<-
  • ...
  • ;.:
  1. 简单位运算演⽰
0110 & 1011 = 0010 AND 都为 1。
0110 | 1011 = 1111 OR ⾄少⼀个为 1。
0110 ^ 1011 = 1101 XOR 只能⼀个为 1。
0110 &^ 1011 = 0100 AND NOT 清除标志位。
  1. 标志位操作。
a := 0
a |= 1 << 2 // 0000100: 在 bit2 设置标志位。
a |= 1 << 6 // 1000100: 在 bit6 设置标志位
a = a &^ (1 << 6) // 0000100: 清除 bit6 标志位
  1. 不⽀持运算符重载。尤其需要注意, "++"、 "--" 是语句⽽⾮表达式。
n := 0
p := &n
// b := n++ // syntax error
// if n++ == 1 {} // syntax error
// ++n // syntax error
n++
*p++ // (*p)++
  1. 没有 "~",取反运算也⽤ "^"。
x := 1
x, ^x // 0001, -0010

初始化

a := []int{
1,
2, // ok
}
b := []int{
1,
2 } // ok

不⽀持三元操作符 "a > b ? a : b"

range

  1. 注意,range 会复制对象
a := [3]int{0, 1, 2}
for i, v := range a { // index、 value 都是从复制品中取出。
if i == 0 { // 在修改前,我们先修改原数组。
a[1], a[2] = 999, 999
fmt.Println(a) // 确认修改有效,输出 [0, 999, 999]。
}
a[i] = v + 100 // 使⽤复制品中取出的 value 修改原数组。
}
fmt.Println(a) // 输出 [100, 101, 102]

Goto, Break, Continue

⽀持在函数内 goto 跳转。标签名区分⼤⼩写,未使⽤标签引发错误

总结

  1. 位运算需加强
comments powered by Disqus