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

Go语言运算符详解

文章目录

  • 1. 算术运算符
  • 2. 关系运算符
  • 3. 逻辑运算符
  • 4. 位运算符
  • 5. 赋值运算符
  • 6. 其他运算符
  • 运算符优先级
  • 注意事项

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. 位运算符

运算符描述示例
&按位ANDa & b
|按位ORa | b
^按位XORa ^ 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程序的基础,合理使用可以提高代码的简洁性和效率。

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

相关文章:

  • No module named ‘xxx’报错原因及解决方式
  • DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002
  • css背景相关
  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • 进程间关系与守护进程
  • Quantum convolutional nerual network
  • 责任链模式
  • 苍穹外卖(数据统计–Excel报表)
  • C语言常见的文件操作函数总结
  • 互联网大厂Java求职面试:电商商品推荐系统中的AI技术应用
  • 超标量处理器设计4-分支预测
  • TypeScript 装饰器高级用法详解
  • Kubernetes排错(十四):Pod状态异常排查手册
  • 深入理解 TypeScript 中 unknown 类型:安全性与使用指南
  • 深度学习:系统性学习策略(二)
  • OBS studio 减少音频中的杂音(噪音)
  • LLM初识
  • 【CTF】Linux Shell RCE绕过(bypass)技术总结
  • 【Tools】VScode远程调试linux服务器(打断点可视化界面方式)
  • 【文本数据找重复记录】2021-11-23
  • C++编程中,什么是野指针?
  • SpringBoot3.0 分组校验
  • jsAPI
  • Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
  • BI PaaS化实践:衡石如何通过可插拔数仓加速企业数据湖仓一体?
  • UNet网络 图像分割模型学习
  • 用户线程和守护线程
  • 机器学习极简入门:从基础概念到行业应用
  • 视频编码原理讲解一:VCL层和NAL层的讲解
  • 微服务架构-注册中心、配置中心:nacos入门