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

http://www.xdnf.cn/news/376651.html

相关文章:

  • IBM BAW(原BPM升级版)使用教程第八讲
  • 研发效率破局之道阅读总结(5)管理文化
  • 17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--ELK
  • Springboot之会话技术
  • 关于web3
  • 初学者入门指南:什么是网络拓扑结构?
  • SRS流媒体服务器(4)源码分析之RTMP端口监听
  • Python+OpenCV实现手势识别与动作捕捉:技术解析与应用探索
  • ROS-关节轨迹(position、velocities/accelerations)绘图
  • 大模型微调算法原理:从通用到专用的桥梁
  • Linux系统管理与编程17:自动化部署ftp服务
  • 31.下一个排列
  • 慈缘基金会“蝴蝶飞”助西藏女孩白玛卓嘎“折翼重生”
  • FreeRTOS Semaphore信号量-笔记
  • 项目管理从专家到小白
  • Pale Moon:速度优化的Firefox定制浏览器
  • 棒球裁判员学习指南·棒球1号位
  • 【数据结构与算法】图的基本概念与遍历
  • 嵌入式硬件篇---麦克纳姆轮(简单运动实现)
  • Linux系统入门第十二章 --Shell编程之正则表达式
  • [架构之美]Windows系统安装MySQL 8.0详细图文教程(十八)
  • 论文精读:YOLOE: Real-Time Seeing Anything
  • 从0开始学习大模型--Day05--理解prompt工程
  • 零知识证明:区块链隐私保护的变革力量
  • HTTPS加密握手与加密算法
  • Kotlin 内联函数深度解析:从源码到实践优化
  • 分书问题的递归枚举算法
  • [思维模式-25]:《本质思考力》-6- 马哲的三大规律:对立统一规律、质量互变规律、否定之否定规律,以及在计算机领域中的体现
  • RHCE实验:远程控制qq邮箱发送邮件
  • 20250510解决NanoPi NEO core开发板在Ubuntu core22.04.3系统下适配移远的4G模块EC200A-CN的问题