Go 语言中的运算符

纸上星河
纸上星河
发布时间:2026-08-25| 200人浏览过
原创

前言

刚接触 Go 时,运算符看起来只是几个符号,但一旦放进表达式里,整数除法、布尔判断、位移和复合赋值就很容易混在一起。下面按“计算什么、返回什么、什么时候容易写错”的顺序整理 Go 里的常见运算符,并结合原始示例说明每类符号在代码中的实际作用,方便你在写条件、处理数值和阅读表达式时快速判断结果。

刚接触 Go 时,运算符看起来只是几个符号,但一旦放进表达式里,整数除法、布尔判断、位移和复合赋值就很容易混在一起。下面按“计算什么、返回什么、什么时候容易写错”的顺序整理 Go 里的常见运算符,并结合原始示例说明每类符号在代码中的实际作用,方便你在写条件、处理数值和阅读表达式时快速判断结果。

算术运算符:先看值怎么被算出来

算术运算符是最常见的一类,主要用于数值计算。Go 中常用的 +、-、*、/、% 分别表示加、减、乘、除和取余。

var a int = 5
var b int = 3
var c int

c = a + b // c等于a+b的值,8
c = a - b // c等于a-b的值,2
c = a * b // c等于a乘b的值,15
c = a / b // c等于a除b的整数值1,整数除整数返回整数,浮点数除浮点数返回浮点数
c = a % b // c等于a除b的余数2,取余(模)运算

这里最需要注意的是除法行为:int 与 int 相除,结果仍然是整数,所以 5 / 3 的结果是 1,而不是带小数的值。如果你想保留小数部分,就需要让参与运算的值变成浮点数。

另外,++ 和 -- 用来表示自增和自减:

var a int = 1
a++ // 自增运算,等同于 a = a + 1
a-- // 自减运算,等同于 a = a - 1

它们的意义很直接,本质上就是在原值基础上加 1 或减 1,适合计数、循环步进这类场景。

关系运算与逻辑运算:表达式什么时候返回 true

如果说算术运算是在算出一个数,那么关系运算和逻辑运算更像是在得出一个判断结果。它们的返回值都是 bool 类型,也就是 true 或 false。

用纸面卡片梳理 Go 常见基础运算符,突出数值计算与布尔判断的区别
Go 运算符的基础分组把数值计算和条件判断拆成两组卡片,更容易建立“结果类型不同”的直觉。

关系运算符:比较两个值的大小或是否相等

== 和 != 用来判断两个值是否相等、是否不相等:

用便签和二进制卡片说明 Go 位运算与位移的结果变化
二进制位是怎么变化的位运算适合用并排位图和箭头解释,能直观看出与、或、异或和位移的变化方向。
var a int = 5
var b int = 3
a == b // 返回fasle,判断a是否等于b
a != b // 返回true,判断a是否不等于b

对应地,>、>=、<、<= 分别表示大于、大于等于、小于、小于等于:

var a int = 5
var b int = 3
a > b // true
a >= b // true
a < b // false
a <= b // false

这类运算符常见于 if、for 条件、边界判断和数据比较中。只要记住一点:它们的结果不是新的数字,而是布尔值。

逻辑运算符:把多个判断拼成完整条件

当一个条件不够表达业务规则时,就需要逻辑运算符把多个判断连起来。Go 中常用的是 &&、|| 和 !,分别表示且、或、非。

var a bool = true
var b bool = false
var c bool
c = a && b  // false, 如果逻辑符号两边都是true,则返回true,否则为false。
c = a || b  // true , 如果逻辑符号两边只要有一个是true,则返回true,否则为false。
c = !a // false 取反,如果a为true,结果就是false,如果a为false,结果就是true。

可以把它理解为三种最基础的条件组合方式:

  • &&:两边都成立,整体才成立。
  • ||:两边只要有一边成立,整体就成立。
  • !:把原来的真假结果反过来。

实际写条件时,关系运算通常负责“比较”,逻辑运算负责“连接”。两者配合起来,才是完整的判断表达式。

位运算符:直接处理二进制位

位运算更偏底层,它不是按十进制数值去理解,而是直接针对二进制位进行操作。在需要处理标记位、权限位、压缩状态值或底层数据时,这类运算很常见。

按位与、按位或、按位异或

&、|、^ 分别表示按位与、按位或、按位异或:

var a = 0b00111100
var b = 0b00001101

// & 按位与,将两数的二进制位相与运算,只有一个为0,与的结果就是0,否则为1。
fmt.Printf("%bn", a&b) // 0000 1100
// | 按位或,将两数的二进制位相或运算,只有一个为1,或的结果就是1,否则为0。
fmt.Printf("%bn", a|b) // 0011 1101
// ^ 按位异或,将两数相应的二进制位值不同则为1,否则为0。
fmt.Printf("%bn", a^b) // 0011 0001

理解这三者时,不妨只盯住“同一位上的 0 和 1 如何变化”:按位与偏向筛选,按位或偏向合并,按位异或偏向比较差异。

左移和右移

<< 和 >> 分别是左移和右移运算符,用来把二进制数整体向左或向右移动若干位。

// 左移运算符"<<",左移n位就是乘以2的n次方
// 右移运算符">>",右移n位就是除以2的n次方
var a = 0b00111100

fmt.Printf("%bn", a<<2) // 11110000
fmt.Printf("%bn", a>>2) // 00001111

在示例语境下,可以直接按“左移近似乘以 2 的 n 次方,右移近似除以 2 的 n 次方”来理解,这能帮助你快速判断结果变化方向。

赋值运算符:把结果写回变量

赋值运算符的作用,是把一个值保存到变量中。最基础的是 =:

运算符 描述 用法
= 将一个值赋给一个变量或常量 c = a + b 将a+b的结果赋值给c
var a int = 5
var b int = 3
var c int = a + b // 将a+b的结果赋值给c

在日常开发里,更常见的是复合赋值。它的好处是把“先运算、再赋值”压缩成一个符号,表达更紧凑。

算术复合赋值

运算符 描述 用法
+= 相加后再赋值 c += a 等于 c = c + a
-= 相减后再赋值 c -= a 等于 c = c - a
*= 相乘后再赋值 c *= a 等于 c = c * a
/= 相除后再赋值 c /= a 等于 c = c / a
%= 求余后再赋值 c %= a 等于 c = c % a

位运算复合赋值

运算符 描述 用法
<<= 左移后赋值 c <<= 2 等于 c = c << 2
>>= 右移后赋值 c >>= 2 等于 c = c >> 2
&= 按位与后赋值 c &= 2 等于 c = c & 2
^= 按位异或后赋值 c ^= 2 等于 c = c ^ 2
|= 按位或后赋值 c |= 2 等于 c = c | 2

这类写法的重点不是新语法,而是读法要顺:先看变量当前值,再看运算符,最后看它会把什么结果重新写回原变量。

其他运算符与优先级:读懂复杂表达式的关键

其他运算符

在 Go 中,& 和 * 还有另一层含义,常见于指针相关代码:

以优先级阶梯和赋值回写流程展示 Go 表达式的阅读顺序
表达式该按什么顺序读把优先级和复合赋值放在同一张图里,适合解释“先算什么,再写回哪里”。
运算符 描述 实例
& 返回变量存储地址 &a 将返回变量的存储地址
* 指针变量 *a 是一个指针变量

这也说明一个符号在不同上下文中可能承担不同作用,阅读时不能只看字符本身,还要看它出现在什么表达式里。

运算符优先级

当一个表达式里同时出现多种运算符时,优先级决定谁先计算。这一点和数学里的“先乘除、后加减”是同一个思路。

下面这组顺序表示 Go 中由高到低的优先级:

优先级 运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

实际使用时,优先级表不一定需要死记,但至少要建立两个判断习惯:一是关系运算通常晚于算术运算,二是逻辑运算往往发生在比较结果之后。遇到较长表达式时,加上括号通常能让代码意图更清楚,也能减少误读。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。