一、算术运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
+ |
加 | a + b |
- |
减 | a - b |
* |
乘 | a * b |
/ |
除 | a / b |
% |
取余 | a % b |
注意:Go 中 / 对整数做 截断除法(向零取整)。
二、关系 / 比较运算符
| 运算符 | 含义 |
|---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
Go 中不同类型不能比较,例如 int(1) == int64(1) 会编译报错。
三、逻辑运算符(Logical Operators)
| 运算符 | 含义 |
|---|---|
&& |
逻辑 AND |
| || | 逻辑或 OR |
! |
逻辑 NOT |
短路求值:&& 遇 false 停止,|| 遇 true 停止。
四、位运算符(Bitwise Operators)
| 运算符 | 含义 | 示例 |
|---|---|---|
& |
按位与 | a & b |
| | | 按位或(OR) | a | b |
^ |
按位异或 | a ^ b |
&^ |
按位清零 (bit clear) | a &^ b |
<< |
左移 | a << 1 |
>> |
右移 | a >> 1 |
Go 特有:&^ (bit clear)
a &^ b 表示:把 b 为 1 的位置从 a 中清掉。
示例:
Go
a := 6 // 110
b := 3 // 011
fmt.Println(a &^ b) // 输出 4(100)
五、赋值运算符
Go 支持组合赋值:
| 运算符 | 含义 |
|---|---|
= |
赋值 |
+= |
加后赋值 |
-= |
减后赋值 |
*= |
乘后赋值 |
/= |
除后赋值 |
%= |
取余后赋值 |
&= |
按位与后赋值 |
| ` | =` |
^= |
按位异或后赋值 |
<<= |
左移后赋值 |
>>= |
右移后赋值 |
&^= |
清零后赋值 |
六、指针相关运算符(Pointer Operators)
| 运算符 | 含义 | 示例 |
|---|---|---|
& |
取变量地址 | p := &x |
* |
取指针指向的值 | y := *p |
注意:Go 没有 C 那种复杂的指针运算。
七、通道运算符(Channel Operators)
| 运算符 | 含义 |
|---|---|
<- |
通道接收 / 发送 |
示例:
Go
ch <- 1 // 发送
x := <-ch // 接收
八、其他重要符号(严格意义上不是运算符但常被问)
| 符号 | 含义 |
|---|---|
:= |
短变量声明 |
... |
可变参数、切片展开 |
. |
访问成员 |
() |
调用函数 / 调整优先级 |
[] |
切片 / 数组索引 |
{} |
代码块或结构体字面量 |
九、运算符优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
| 优先级 | 运算符 |
|---|---|
| 5 | * / % << >> & &^ |
| 4 | + - | ^ |
| 3 | == != < <= > >= |
| 2 | && |
| 1 | || |
可以通过使用括号来临时提升某个表达式的整体运算优先级。