Go语言运算符详解

发布于:2025-05-12 ⋅ 阅读:(18) ⋅ 点赞:(0)


Go语言提供了与其他语言类似的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。

1. 算术运算符

运算符 描述 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b
% 取模(求余) a % b
++ 自增 a++ (Go中只有后置)
自减 a-- (Go中只有后置)
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
a++                 // a = 11
b--                 // b = 2

2. 关系运算符

运算符 描述 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b
x := 5
y := 7
fmt.Println(x == y)  // false
fmt.Println(x != y)  // true
fmt.Println(x > y)   // false
fmt.Println(x < y)   // true
fmt.Println(x >= 5)  // true

3. 逻辑运算符

运算符 描述 示例
&& 逻辑与 a && b
|| 逻辑或 a || b
! 逻辑非 !a
a := true
b := false
fmt.Println(a && b)  // false
fmt.Println(a || b)  // true
fmt.Println(!a)      // false

4. 位运算符

运算符 描述 示例
& 按位AND a & b
| 按位OR a | b
^ 按位XOR a ^ b
&^ 位清除(AND NOT) a &^ b
<< 左移 a << b
>> 右移 a >> b
x := 10  // 1010
y := 3   // 0011
fmt.Println(x & y)   // 2 (0010)
fmt.Println(x | y)   // 11 (1011)
fmt.Println(x ^ y)   // 9 (1001)
fmt.Println(x &^ y)  // 8 (1000)
fmt.Println(x << 1)  // 20 (10100)
fmt.Println(x >> 1)  // 5 (0101)

5. 赋值运算符

运算符 描述 示例
= 简单赋值 a = b
+= 加后赋值 a += b (等价于a = a + b)
-= 减后赋值 a -= b
*= 乘后赋值 a *= b
/= 除后赋值 a /= b
%= 取模后赋值 a %= b
&= 按位AND后赋值 a &= b
|= 按位OR后赋值 a |= b
^= 按位XOR后赋值 a ^= b
<<= 左移后赋值 a <<= b
>>= 右移后赋值 a >>= b
a := 10
a += 5  // a = 15
a -= 3  // a = 12
a *= 2  // a = 24
a /= 4  // a = 6
a %= 4  // a = 2

6. 其他运算符

运算符 描述 示例
& 取地址 &a
* 指针解引用 *p
<- 通道操作 ch <- x (发送), x = <-ch (接收)
x := 10
ptr := &x       // 获取x的地址
fmt.Println(*ptr) // 10 (解引用)

ch := make(chan int, 1)
ch <- 5         // 发送到通道
val := <-ch     // 从通道接收

运算符优先级

Go语言运算符优先级从高到低如下:
在实际应用中,建议使用括号来保证运算符的执行顺序,避免出现预期外的结果,即使你的优先级背的滚瓜烂熟,还是会受到编译器版本影响。

1、() [] -> . ++ – (后缀)

2、! ^ + - * & <- ++ – (前缀)

3、* / % << >> & &^

4、+ - | ^

5、== != < <= > >=

6、&&

7、||

8、= += -= *= /= %= <<= >>= &= ^= |=

注意事项

1、Go语言没有前置的++和–运算符,只有后置形式。

2、Go语言没有三元运算符(?😃,必须使用if-else代替。

3、不同类型的值不能直接运算,必须显式转换。

4、整数除法会截断小数部分。

// 错误示例
a := 5
// b := ++a  // 错误:Go没有前置++

// 正确做法
a++
b := a

// 类型转换示例
var x int32 = 10
var y int64 = 20
// sum := x + y  // 错误:类型不匹配
sum := int64(x) + y  // 正确

掌握这些运算符是编写Go程序的基础,合理使用可以提高代码的简洁性和效率。


网站公告

今日签到

点亮在社区的每一天
去签到