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.mzph.cn/web/79493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium模拟人类行为,操作网页的方法(全)

看到有朋友评论问&#xff0c;用selenium怎么模仿人类行为&#xff0c;去操作网页的页面呢&#xff1f; 我想了想&#xff0c;这确实是一个很大的点&#xff0c;不应该是一段代码能解决的&#xff0c; 就像是,如果让程序模拟人类的行为。例如模拟人类买菜&#xff0c;做饭&am…

RabbitMQ的工作队列模式和路由模式有什么区别?

RabbitMQ 的工作队列模式&#xff08;Work Queues&#xff09;和路由模式&#xff08;Routing&#xff09;是两种不同的消息传递模式&#xff0c;主要区别在于消息的分发逻辑和使用场景。以下是它们的核心差异&#xff1a; 1. 工作队列模式&#xff08;Work Queues&#xff09…

牛客练习赛138(首篇万字题解???)

赛时成绩如下&#xff1a; 1. 小s的签到题 小s拿到了一个比赛榜单&#xff0c;他要用最快的速度找到签到题&#xff0c;但是小s脑子还是有点晕&#xff0c;请你帮帮小s&#xff0c;助力他找到签到题。 比赛榜单是一个 2 行 n 列的表格&#xff1a; 第一行是 n 个大写字母&#…

linux0.11内核源码修仙传第十六章——获取硬盘信息及根目录挂载

&#x1f680; 前言 书接第十四章&#xff1a;linux0.11内核源码修仙传第十四章——进程调度之fork函数&#xff0c;在这一节博客中已经通过fork进程创建了一个新的进程1&#xff0c;并且可以被调度&#xff0c;接下来接着主线继续走下去。希望各位给个三连&#xff0c;拜托啦&…

mobile自动化测试-appium webdriverio

WebdriverIO是一款支持mobile app和mobile web自动化测试框架&#xff0c;与appium集成&#xff0c;完成对mobile应用测试。支持ios 和android两种平台&#xff0c;且功能丰富&#xff0c;是mobile app自动化测试首选框架。且官方还提供了mobile 应用测试example代码&#xff0…

Kubernetes排错(十):常见网络故障排查

通用排查思路 Kubernetes 集群内不同服务之间的网络通信出现异常&#xff0c;表现为请求超时、连接失败或响应缓慢&#xff0c;导致服务间依赖关系中断&#xff0c;依赖服务的功能不可用或性能下降&#xff0c;甚至可能波及整个微服务架构&#xff0c;引发连锁反应&#xff0c…

PyTorch 张量与自动微分操作

笔记 1 张量索引操作 import torch ​ # 下标从左到右从0开始(0->第一个值), 从右到左从-1开始 # data[行下标, 列下标] # data[0轴下标, 1轴下标, 2轴下标] ​ def dm01():# 创建张量torch.manual_seed(0)data torch.randint(low0, high10, size(4, 5))print(data->,…

接口的基础定义与属性约束

在 TypeScript 中&#xff0c;接口&#xff08;Interface&#xff09;是一个非常强大且常用的特性。接口定义了对象的结构&#xff0c;包括对象的属性和方法&#xff0c;可以为对象提供类型检查和约束。通过接口&#xff0c;我们可以清晰地描述一个对象应该具备哪些属性和方法。…

高效全能PDF工具,支持OCR识别

软件介绍 PDF XChange Editor是一款功能强大的PDF编辑工具&#xff0c;支持多种操作功能&#xff0c;不仅可编辑PDF内容与图片&#xff0c;还具备OCR识别表单信息的能力&#xff0c;满足多种场景下的需求。 软件特点 这款PDF编辑器完全免费&#xff0c;用户下载后直接…

OpenCV 中用于背景分割的一个类cv::bgsegm::BackgroundSubtractorGMG

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::bgsegm::BackgroundSubtractorGMG 是 OpenCV 中用于背景分割的一个类&#xff0c;它实现了基于贝叶斯推理的背景建模算法&#xff08;Bayesi…

MongoDB知识框架

简介&#xff1a;MongoDB 是一个基于分布式文件存储的数据库&#xff0c;属于 NoSQL 数据库产品&#xff0c;以下是其知识框架总结&#xff1a; 一、数据模型 文档&#xff1a;MongoDB 中的数据以 BSON&#xff08;二进制形式的 JSON&#xff09;格式存储在集合中&#xff0c;…

WEBSTORM前端 —— 第2章:CSS —— 第8节:网页制作2(小兔鲜儿)

目录 1.项目目录 2.SEO 三大标签 3.Favicon 图标 4.版心 5.快捷导航(shortcut) 6.头部(header) 7.底部(footer) 8.banner 9.banner – 圆点 10.新鲜好物(goods) 11.热门品牌(brand) 12.生鲜(fresh) 13.最新专题(topic) 1.项目目录 【xtx-pc】 ima…

1、RocketMQ 核心架构拆解

1. 为什么要使用消息队列&#xff1f; 消息队列&#xff08;MQ&#xff09;是分布式系统中不可或缺的中间件&#xff0c;主要解决系统间的解耦、异步和削峰填谷问题。 解耦&#xff1a;生产者和消费者通过消息队列通信&#xff0c;彼此无需直接依赖&#xff0c;极大提升系统灵…

[Linux网络_71] NAT技术 | 正反代理 | 网络协议总结 | 五种IO模型

目录 1.NAT技术 NAPT 2.NAT和代理服务器 3.网线通信各层协议总结 补充说明 4.五种 IO 模型 1.什么是IO&#xff1f;什么是高效的IO&#xff1f; 2.有那些IO的方式&#xff1f;这么多的方式&#xff0c;有那些是高效的&#xff1f; 异步 IO &#x1f3a3; 关键缺陷类比…

Unity基础学习(八)时间相关内容Time

众所周知&#xff0c;每一个游戏都会有自己的时间。这个时间可以是内部&#xff0c;从游戏开始的时间&#xff0c;也可以是外部真实的物理时间&#xff0c;时间相关内容 主要用于游戏中 参与位移计时 时间暂停等。那么我们今天就来看看Unity中和时间相关的内容。 Unity时间功能…

Java游戏服务器开发流水账(1)游戏服务器的架构浅析

新项目立项停滞&#xff0c;头大。近期读老项目代码看到Java&#xff0c;笔记记录一下。 为什么要做服务器的架构 游戏服务器架构设计具有多方面的重要意义&#xff0c;它直接关系到游戏的性能、可扩展性、稳定性以及用户体验等关键因素 确保游戏的流畅运行 优化数据处理&a…

计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术

基于Transformer的低照度图像增强技术通过结合Transformer的全局建模能力和传统图像增强理论(如Retinex),在保留颜色信息、抑制噪声和平衡亮度方面展现出显著优势。以下是其核心原理、关键公式及典型代码实现: 一、原理分析 1. 全局依赖建模与局部特征融合 Transformer的核…

Linux 文件目录管理常用命令

pwd 显示当前绝对路径 cd 切换目录 指令备注cd -回退cd …返回上一层cd ~切换到用户主目录 ls 列出目录的内容 指令备注ls -a显示当前目录中的所有文件和目录&#xff0c;包括隐藏文件ls -l以长格式显示当前目录中的文件和目录ls -hl以人类可读的方式显示当前目录中的文…

【Linux 系统调试】性能分析工具perf使用与调试方法

目录 一、perf基本概念 1‌. 事件类型‌ 2‌. 低开销高精度 3‌. 工具定位‌ 二、安装与基础配置 1. 安装方法 2. 启用符号调试 三、perf工作原理 1. 数据采集机制 2. 硬件事件转化流程 四、perf应用场景 1. 系统瓶颈定位 2. 锁竞争优化 3. 缓存优化 五、perf高级…

嵌入式中屏幕的通信方式

LCD屏通信方式详解 LCD屏&#xff08;液晶显示屏&#xff09;的通信方式直接影响其数据传输效率、显示刷新速度及硬件设计复杂度。根据应用场景和需求&#xff0c;LCD屏的通信方式主要分为以下三类&#xff0c;每种方式在协议类型、数据速率、硬件成本及适用场景上存在显著差异…