Go语言运算符
运算符是程序进行计算、判断、逻辑处理的基础。Go 的运算符简洁安全,不支持三目运算符、杜绝非法运算。
一、Go运算符分类总览
Go 常用运算符分为 6 大类:
- 算术运算符:加减乘除取余
- 关系运算符:大于、小于、等于、不等于
- 逻辑运算符:与、或、非
- 位运算符:二进制运算
- 赋值运算符:赋值、复合赋值
- 其他运算符:自增、自减、取地址、解引用
二、算术运算符(+ - * / %)
用于数值计算,支持整型、浮点型。
| 符号 | 作用 | 示例 |
|---|---|---|
| + | 相加 / 字符串拼接 | a + b |
| - | 相减 | a - b |
| * | 相乘 | a * b |
| / | 相除 | a / b |
| % | 取余(取模) | a % b |
重点易错
- 整数 / 整数 = 整数,向下取整,不会保留小数
- 取余 % 只能用于整型,浮点不能取余
代码示例
packagemainimport"fmt"funcmain(){a:=10b:=3fmt.Println(a+b)// 13fmt.Println(a-b)// 7fmt.Println(a*b)// 30fmt.Println(a/b)// 3 整数相除舍去小数fmt.Println(a%b)// 1// 字符串拼接s1:="hello"s2:="golang"fmt.Println(s1+s2)}三、关系运算符(比较大小)
运算结果一定是bool 类型(true / false),常用于 if 判断、循环条件。
| 符号 | 含义 |
|---|---|
| == | 等于 |
| != | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
易错点
- 判断相等是==,不是 =
- Go 不支持连续判断:
a < b < c非法
四、逻辑运算符(&& || !)
用于拼接多个判断条件,返回布尔值。
| 符号 | 含义 | 规则 |
|---|---|---|
| && | 逻辑与(并且) | 全真才真,一假则假 |
| || | 逻辑或(或者) | 一真则真,全假才假 |
| ! | 逻辑非(取反) | 真变假,假变真 |
短路特性(面试必考)
- && 短路:前面为 false,后面不执行
- || 短路:前面为 true,后面不执行
a:=10ifa>20&&a++>0{}// a 仍然是10,后半句没执行五、位运算符(针对二进制)
位运算是底层运算,速度最快,算法题高频使用。
| 符号 | 作用 |
|---|---|
| & | 按位与:同为1才为1 |
| | | 按位或:有1就为1 |
| ^ | 按位异或:相同为0,不同为1 |
| << | 左移(左移n位就是乘以2的n次方) |
| >> | 右移(除以2的n次方) |
六、赋值运算符
| 符号 | 说明 |
|---|---|
| = | 普通赋值 |
| += | 相加后赋值 |
| -= | 相减后赋值 |
| *= | 相乘后赋值 |
| /= | 相除后赋值 |
| %= | 取余后赋值 |
a:=10a+=5// 等价 a = a + 5七、自增、自减(Go独有规则)
- i++自增1
- i–自减1
Go 硬核规则(区别其他语言)
只能后置,不能前置!不能参与运算!
非法代码:
++i// 报错res:=i++// 报错正确写法:
i++八、Go 运算符优先级(从高到低)
不用死记,记住核心:括号 > 算术 > 位运算 > 比较 > 逻辑
- 括号 ()
- 自增、自减
- 乘、除、取余
- 加、减
- 移位
- 比较运算符(> < == !=)
- 逻辑与 &
- 逻辑或 ||
- 赋值运算符
九、Go 独有特点
- ✅ 没有三目运算符(Go 认为三目代码混乱)
- ✅ 自增自减只能后置、不能嵌套运算
- ✅ 整数相除自动取整
- ✅ 严格类型匹配,不同类型不能直接运算
- ✅ 逻辑短路机制提升性能
十、总结
- 算术运算符负责数值计算,注意整数相除和取余规则;
- 关系运算符返回布尔值,用于条件判断;
- 逻辑运算符支持短路机制,提升执行效率;
- 位运算符效率极高,异或是经典算法利器;
- Go 对 ++、-- 做了严格限制,语法更安全、代码更整洁。