当前位置: 首页 > news >正文

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

>Go 语言提供了一整套简洁且强大的运算符,用于数值计算、逻辑判断、赋值操作等。本章将带你系统了解 Go 中各类运算符及其组合表达式的使用方法。

---

### 一、运算符分类总览

| 运算符类型 | 示例                 | 说明           |              |             |
| ----- | ------------------ | ------------ | ------------ | ----------- |
| 算术运算符 | `+ - * / %`        | 加减乘除取余       |              |             |
| 赋值运算符 | `= += -= *= /= %=` | 基础赋值与复合赋值    |              |             |
| 比较运算符 | `== != > < >= <=`  | 常用于条件判断      |              |             |
| 逻辑运算符 | \`&&               |              | !\`          | 与、或、非(布尔运算) |
| 位运算符  | \`&                | ^ &^ << >>\` | 位与、或、异或、位清零等 |             |
| 其他运算符 | `&* <- <-chan`     | 指针、通道等相关运算符  |              |             |

---

### 二、算术运算符

```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
```

> 注意:整数除法会自动舍去小数部分,使用浮点数可保留精度。

---

### 三、赋值运算符

Go 支持基础赋值和复合赋值:

```go
x := 5
x += 3 // 等价于 x = x + 3
x *= 2 // 等价于 x = x * 2
```

可用运算符包括:`+= -= *= /= %=`

---

### 四、比较运算符

```go
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 进行直接比较。

---

### 五、逻辑运算符(布尔逻辑)

```go
x := true
y := false
fmt.Println(x && y) // false
fmt.Println(x || y) // true
fmt.Println(!x)     // false
```

* `&&`:逻辑与,两个都为真才为真;
* `||`:逻辑或,任一为真即为真;
* `!`:逻辑非,取反。

---

### 六、位运算符(适用于整数类型)

```go
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 起不可作为表达式)

```go
i := 0
i++ // 等价于 i = i + 1
i-- // 等价于 i = i - 1
```

> 注意:Go 中 `i++` 不能写在赋值语句或表达式中,如 `j := i++` 是非法的。

---

### 八、优先级与结合性

| 优先级(从高到低) | 运算符                    |     |    |
| --------- | ---------------------- | --- | -- |
| 1         | `* / % << >> & &^`     |     |    |
| 2         | \`+ -                  | ^\` |    |
| 3         | `== != < <= > >=`      |     |    |
| 4         | `&&`                   |     |    |
| 5         | \`                     |     | \` |
| 6         | 赋值运算符(如 `=` `+=` `-=`) |     |    |

> 建议使用括号明确优先级,提升可读性。

---

### 九、表达式的使用场景

```go
// 条件判断
if x > 0 && x < 100 {
    fmt.Println("x 在区间 (0,100) 内")
}

// 赋值表达式
a := 3
a *= 2 + 1 // 等价于 a = a * (2 + 1)
```

---

### 十、小结

* 运算符是表达式的基本构建单元,需熟练掌握;
* Go 不支持运算符重载;
* 使用括号提高表达式清晰度;
* 位运算适用于性能敏感或底层编程场景。

相关文章:

  • Scala与Go的异同教程
  • 【计算机视觉】OpenCV项目实战:基于OpenCV的图像分割技术深度解析与实践指南
  • 5.1 神经网络: 层和块
  • 电子电器架构 --- 车载以太网拓扑
  • k8s删除pv和pvc后,vg存储没释放分析
  • word换行符和段落标记
  • 2024年AI发展趋势全面解析:从多模态到AGI的突破
  • Python 从 SQLite 数据库中批量提取图像数据
  • 深拷贝与浅拷贝:理解 Python 中的对象复制机制
  • 数据格式(Data Format)设计
  • python3环境安装
  • redis八股--1
  • Redis 主从同步与对象模型(四)
  • JavaScript中对象和数组的常用方法
  • rust-candle学习笔记13-实现多头注意力
  • 嵌入式STM32学习——继电器
  • 大模型微调算法原理:从通用到专用的桥梁
  • 解决mybatisplus主键无法自增的问题
  • Spring之AOP
  • Windows中安装nacos-server-2.4.2
  • 这座古村,藏着多少赣韵风华
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量
  • 李在明正式登记参选下届韩国总统
  • 纽约大学朗格尼医学中心的转型带来哪些启示?
  • 第32届梅花奖终评启幕,上海京剧院《智取威虎山》满堂彩
  • 成都公积金新政征求意见:购买保障性住房最高贷款额度上浮50%