Go 语言提供了一整套简洁且强大的运算符,用于数值计算、逻辑判断、赋值操作等。本章将带你系统了解 Go 中各类运算符及其组合表达式的使用方法。
一、运算符分类总览
运算符类型 | 示例 | 说明 | ||
算术运算符 | + - * / % |
加减乘除取余 | ||
赋值运算符 | = += -= *= /= %= |
基础赋值与复合赋值 | ||
比较运算符 | == != > < >= <= |
常用于条件判断 | ||
逻辑运算符 | `&& | !` | 与、或、非(布尔运算) | |
位运算符 | `& | ^ &^ << >>` | 位与、或、异或、位清零等 | |
其他运算符 | &* <- <-chan |
指针、通道等相关运算符 |
二、算术运算符
a := 10 b := 3 fmt.Println(a + b) // 13 fmt.Println(a - b) // 7 fmt.Println(a * b) // 30 fmt.Println(a / b) // 3 (整数除法) fmt.Println(a % b) // 1
注意:整数除法会自动舍去小数部分,使用浮点数可保留精度。
三、赋值运算符
Go 支持基础赋值和复合赋值:
x := 5 x += 3 // 等价于 x = x + 3 x *= 2 // 等价于 x = x * 2
可用运算符包括:+= -= *= /= %=
四、比较运算符
a := 5 b := 10 fmt.Println(a == b) // false fmt.Println(a != b) // true fmt.Println(a < b) // true fmt.Println(a >= b) // false
- • 用于数值、布尔值、字符串、数组等的比较;
- • 不支持对 map、slice、function 进行直接比较。
五、逻辑运算符(布尔逻辑)
x := true y := false fmt.Println(x && y) // false fmt.Println(x || y) // true fmt.Println(!x) // false
- •
&&
:逻辑与,两个都为真才为真; - •
||
:逻辑或,任一为真即为真; - •
!
:逻辑非,取反。
六、位运算符(适用于整数类型)
a := 5 // 0101 b := 3 // 0011 fmt.Println(a & b) // 1 (0001) fmt.Println(a | b) // 7 (0111) fmt.Println(a ^ b) // 6 (0110) fmt.Println(a &^ b) // 4 (0100) 清除 b 中为 1 的位 fmt.Println(a << 1) // 10(左移) fmt.Println(a >> 1) // 2 (右移)
七、自增与自减(Go 1.14 起不可作为表达式)
i := 0 i++ // 等价于 i = i + 1 i-- // 等价于 i = i - 1
注意:Go 中
i++
不能写在赋值语句或表达式中,如j := i++
是非法的。
八、优先级与结合性
优先级(从高到低) | 运算符 | ||
1 | * / % << >> & &^ |
||
2 | `+ - | ^` | |
3 | == != < <= > >= |
||
4 | && |
||
5 | ` | ` | |
6 | 赋值运算符(如 = += -= ) |
建议使用括号明确优先级,提升可读性。
九、表达式的使用场景
// 条件判断 if x > 0 && x < 100 { fmt.Println("x 在区间 (0,100) 内") } // 赋值表达式 a := 3 a *= 2 + 1 // 等价于 a = a * (2 + 1)
十、小结
- • 运算符是表达式的基本构建单元,需熟练掌握;
- • Go 不支持运算符重载;
- • 使用括号提高表达式清晰度;
- • 位运算适用于性能敏感或底层编程场景。