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程序的基础,合理使用可以提高代码的简洁性和效率。