运算符与表达式 -《Go语言实战指南》

144 阅读2分钟

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 不支持运算符重载;
  • • 使用括号提高表达式清晰度;
  • • 位运算适用于性能敏感或底层编程场景。