06 go语言(golang) - 循环语句运算符

循环语句

在Go语言中,for 循环是实现循环的主要方式,它非常灵活且强大。

1. 基本的 for 循环

这种形式类似于 C/C++ 和 Java 中的 for 循环。它包括三个部分:初始化语句;条件表达式;后续操作(通常是递增或递减)。

for 初始化; 条件; 后续操作 {// 循环体代码
}

示例代码

	for num := 0; num < 20; num++ {fmt.Println(num)}// 后续操作可以放到for循环里面for num := 0; num < 20; {fmt.Println(num)num++}

2. 类似 while 的 for 循环

在Go中,你可以省略初始化和后续操作部分,只保留条件表达式,使其行为类似于传统意义上的 while 循环。

for 条件 {// 循环体代码
}

示例代码

	num := 0for num < 20 {fmt.Println(num)num++}

3. 无限循环

如果你省略了所有三个部分(初始化、条件、后续操作),那么循环将变成一个无限循环。

for {// 永远执行直到内部有break或return等跳出逻辑。
}

示例代码

package mainimport ("fmt""time"
)func main() {num := 0for {fmt.Println(num)num++//	睡眠1秒time.Sleep(time.Second * 1)}
}

4. range循环

Go 还提供了一种特殊形式的 for 来迭代集合类型(如数组、切片和映射map)。使用关键字 range, 它会返回两个值:索引和元素值。

	nums := []int{10, 20, 30, 40, 50}for index, value := range nums {fmt.Printf("下标: %d ,下标对应值: %d\n", index, value)}//	在 range 循环中,如果不需要索引,可以使用 _ 来忽略它:for _, value := range nums {fmt.Printf("下标对应值: %d\n", value)}

5. 控制语句:break 和 continue

基本用法

  • break: 跳出整个循块。
  • continue: 跳过当前迭代,并开始下一次迭代。

每种类型的 for 循块都可以使用这些控制语句来改变其执行流程。

	for i := 0; i < 20; i++ {fmt.Println(i)// 到5的时候跳出循环if i == 5 {break}}for i := 0; i < 20; i++ {// 到5的时候跳过,继续下次循环if i == 5 {continue}fmt.Println(i)}

配合标签使用

在Go语言中,continuebreak 可以与标签(label)配合使用来控制嵌套循环的流程。这种用法可以让你直接跳出多层循环或者继续执行外层循环的下一次迭代,而不仅仅是最内层的那个。

标签是紧跟着冒号的一个标识符(例如 Label:),它可以放在任何语句之前,但通常用于循环语句前。

使用 break 与标签

当你使用带有标签的 break 时,你可以结束指定标签所指向的循环,而不仅是当前最内部的那个for循环。

package mainimport "fmt"func main() {
OuterLoop:for i := 0; i < 3; i++ {for j := 0; j < 3; j++ {if i > j {fmt.Printf("已满足条件i>j,跳出整个循环 i = %d, j = %d\n", i, j)break OuterLoop}fmt.Printf("i = %d, j = %d\n", i, j)}}
}

输出:

i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
已满足条件i>j,跳出整个循环 i = 1, j = 0
使用 continue 与标签

当你使用带有标签的 continue时,程序会跳过当前迭代,并开始执行带有该标签的外层循环下一次迭代。

package mainimport "fmt"func main() {
OuterLoop:for i := 0; i < 3; i++ {for j := 0; j < 3; j++ {if i == j {fmt.Printf("已满足条件i==j,继续下个循环 i = %d, j = %d\n", i, j)continue OuterLoop // 跳到OuterLoop开始新一轮迭代}fmt.Printf("i = %d, j = %d\n", i, j)}}
}

输出:

已满足条件i==j,继续下个循环 i = 0, j = 0
i = 1, j = 0
已满足条件i==j,继续下个循环 i = 1, j = 1
i = 2, j = 0
i = 2, j = 1
已满足条件i==j,继续下个循环 i = 2, j = 2

练习

前面 05 go语言(golang) - 常量和条件语句 文章中的练习题,现在可以优化为:

用户输入一个数字,看是否与程序随机生成的一样

package mainimport ("fmt""math/rand"
)func main() {fmt.Println("猜猜看,请输入我想1-100数字:")var targetNumber int = rand.Intn(100) + 1 // 随机生成1-100的数字,左闭右开,不加一的话是0到99//println(targetNumber)count := 0for {if number := inputNumber(); number > targetNumber {fmt.Printf("比 %d 小,再猜猜\n", number)count++} else if number < targetNumber {fmt.Printf("比 %d 大,再猜猜\n", number)count++} else {fmt.Printf("恭喜!猜对了!一共猜了 %d 次\n", count)break}}}func inputNumber() int {var number int_, err := fmt.Scanf("%d", &number)if err != nil {fmt.Println("输入有误请重新输入!")return inputNumber()}return number
}

运算符

官方文档

1. 算术运算符

用于执行基本数学计算。

  • +(加)
  • -(减)
  • *(乘)
  • /(除)
  • %(模)

2. 关系运算符

用于比较两个值之间的关系。

  • == (等于)
  • != (不等于)
  • < (小于)
  • > (大于)
  • <= (小于等于)
  • >= (大于等于)

3. 逻辑运算符

用来组合条件。

  • &&(逻辑与):如果两边都为真,则结果为真。
  • ||(逻辑或):如果至少一边为真,则结果为真。
  • !(逻辑非):取反。

4. 赋值运算符

赋值运算符用来给变量赋值。

  • =(赋值)
  • :=(短变量声明并赋值)
  • +=(加法赋值)
  • -=(减法赋值)
  • *=(乘法赋值)
  • /=(除法赋值)
  • %=(取模赋值)

5.位操作运算符

位操作对整数在二进制级别进行操作。

  • &(按位与)
  • |(按位或)
  • ^(按位异或)
  • <<(左移)
  • >>(右移)

示例代码

package mainimport "fmt"func main() {// 算术运算fmt.Println("10 + 5 =", 10+5)fmt.Println("10 - 5 =", 10-5)fmt.Println("10 * 5 =", 10*5)fmt.Println("10 / 5 =", 10/5)fmt.Println("10 % 3 =", 10%3)// 比较运算fmt.Println("5 == 5 为", 5 == 5)fmt.Println("5 != 5 为", 5 != 5)fmt.Println("7 > 3 为", 7 > 3)fmt.Println("7 < 3 为", 7 < 3)fmt.Println("7 <= 3 为", 7 <= 3)fmt.Println("7 <= 3 为", 7 <= 3)// 逻辑运算fmt.Println("true && false 为", true && false)fmt.Println("true || false 为", true || false)fmt.Println("!true 为", !true)// 赋值运算y := 5fmt.Println("y :=", y)var x = 10fmt.Println("x =", x)x += 5fmt.Println("x += 5 =", x)x -= 5fmt.Println("x -= 5 =", x)x *= 5fmt.Println("x *= 5 =", x)x /= 5fmt.Println("x /= 5 =", x)x %= 3fmt.Println("x %= 3 =", x)// 位运算fmt.Println("10 & 3 =", 10&3)   // 因为10的二进制是1010,3的二进制是0011,所以按位与的结果是0010,所以结果是2fmt.Println("10 | 3 =", 10|3)   // 因为10的二进制是1010,3的二进制是0011,所以按位或的结果是1011,所以结果是11fmt.Println("10 ^ 3 =", 10^3)   // 因为10的二进制是1010,3的二进制是0011,所以按位异或(一真一假为真)的结果是1001,所以结果是9fmt.Println("10 << 1 =", 10<<1) // 因为10的二进制是1010,左移一位就是10100,所以结果是20fmt.Println("10 >> 1 =", 10>>1) // 因为10的二进制是1010,右移一位就是0101,所以结果是5}

指针运算符

&* 是与指针相关的运算符。它们分别用于获取变量的地址和访问指针指向的变量值。

关于指针我们下一篇文章再展开。

& 运算符

当你在一个变量前使用 & 符号时,它将返回该变量的内存地址。这是创建指针的常见方式。

package mainimport "fmt"func main() {var a int = 58fmt.Println("a的值:", a)    // 输出变量a的值fmt.Println("a的地址:", &a) // 输出变量a的内存地址
}

* 运算符

当你在一个指针前使用 * 符号时,它将访问该指针所指向的内存地址中存储的值(即解引用操作)。

package mainimport "fmt"func main() {var a int = 58var p *int = &a          // p是一个int类型的指针,指向a的地址fmt.Println("p的解引:", *p) // 使用*p来获取p所指向地址上存储的值(即a)}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57602.shtml

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

相关文章

Netty无锁化设计之对象池实现

池化技术是比较常见的一种技术&#xff0c;在平时我们已经就接触很多了&#xff0c;比如线程池&#xff0c;数据库连接池等等。当我们要使用一个资源的时候从池中去获取&#xff0c;用完就放回池中以便其他线程可以使用&#xff0c;这样的目的就是为了减少资源开销&#xff0c;…

JMeter 动态参数赋值实践

目录 前言 单线程 用户参数 场景说明 实战结果 配置明细 单线程 CSV Data Set Config 场景说明 实践结果 配置明细 多线程循环单次执行 场景说明 实践结果 配置明细 单线程 控制器 用户自定义变量 用户参数 场景说明 实战结果 配置明细 多并发 多接口 …

AudioSegment 提高音频音量 - python 实现

一些采集的音频声音音量过小可以通过 AudioSegment 实现音量增强。 按照 python 库&#xff1a; pip install AudioSegment 代码具体实现&#xff1a; #-*-coding:utf-8-*- # date:2024-10 # Author: DataBall - XIAN # Function: 音频增加音量import os from pydub import …

Matlab学习01-矩阵

目录 一&#xff0c;矩阵的创建 1&#xff0c;直接输入法创建矩阵 2&#xff0c;利用M文件创建矩阵 3&#xff0c;利用其它文本编辑器创建矩阵 二&#xff0c;矩阵的拼接 1&#xff0c;基本拼接 1&#xff09; 水平方向的拼接 2&#xff09;垂直方向的拼接 3&#xf…

记录:网鼎杯2024赛前热身WEB01

目录扫描&#xff0c;发现上传点&#xff0c;判断可能存在文件上传漏洞&#xff0c;并根据文件后缀判断网站开发语言为php 编写蚁剑一句话木马直接上传 蚁剑连接 这里生成 的flag是随机的&#xff0c;因为烽火台反作弊会随机生成环境&#xff0c;在一顿查找后&#xff0c;在hom…

stm32F103 实现呼吸灯效果

目录 硬件连接 软件实现步骤 初始化系统时钟。 配置 GPIO 引脚。 配置定时器以生成 PWM 信号。 在主循环中调整 PWM 占空比以实现呼吸效果。 示例代码 1. 初始化系统时钟 2. 配置 GPIO 引脚 3. 配置定时器以生成 PWM 信号 4. 在主循环中调整 PWM 占空比以实现呼吸效…

5G RedCap工业路由器赋能电力物联网应用

随着5G轻量化技术应用的推进&#xff0c;5G RedCap旨在提供低功耗、低成本、广覆盖等功能特点赋能电力智能化升级。特别适用于工业物联网、低空经济、车联网、消费电子和轻量级5G的需求。 5G RedCap工业路由器的特点 低功耗&#xff1a;5G RedCap工业路由器通过节能技术&#…

npm run serve 提示异常Cannot read property ‘upgrade‘ of undefined

npm run serve 提示Cannot read property ‘upgrade’ of undefined 一般是proxy的target代理域名问题导致的&#xff0c;如下&#xff1a; 解决方案&#xff1a; proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题&#xff0c;会导致…

PTA数据库编程练习合集

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名…

JavaWeb开发7

前后端混合开发 沟通成本高 分工不明确 不便管理 不便维护扩展 前后端分离开发 前端--接口--后端 需求分析--接口定义--前后端并行开发--测试--前后端连调测试 前端开发 模块化 JS、CSS 组件化 UI结构、样式、行为 规范化 目录结构、编码、接口 自动化 构建、部署、…

Git_IDEA集成GitHub

Git_IDEA集成GitHub 设置 GitHub 账号 分享工程到 GitHub push 推送本地库到远程库 pull 拉取远程库到本地库 clone 克隆远程库到本地 设置 GitHub 账号 去 GitHub 账户上设置 token 因为网络原因用账号密码可能登不上&#xff0c;所以选择用口令。 分享工程到 GitHub…

网络安全领域推荐证书介绍及备考指南

在网络安全领域&#xff0c;拥有专业认证不仅可以证明个人的专业能力&#xff0c;还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…

Matlab 疲劳驾驶检测

课题介绍 该课题为基于眼部和嘴部的疲劳驾驶检测。带有一个人机交互界面GUI&#xff0c;通过输入视频&#xff0c;分帧&#xff0c;定位眼睛和嘴巴&#xff0c;通过眼睛和嘴巴的张合度&#xff0c;来判别是否疲劳。 二、操作步骤 第一步&#xff1a;最好电脑安装的是MATLAB …

Jmeter 实战 JDBC配置

​ JDBC JDBC&#xff08;Java Database Connectivity&#xff09;是一种用于执行SQL语句的Java API。通过这个API&#xff0c;可以直接连接并执行SQL脚本&#xff0c;与数据库进行交互。 使用JMeter压力测试时&#xff0c;操作数据库的场景 在使用JMeter进行接口压力测试时…

全栈面试题】模块3-9】JavaSE高级 -- Object类、 GC、反射、Socket

目录 面试题3.62 JAVA中Object类中有哪些常用方法&#xff1f; 面试题3.63 什么是深拷贝和浅拷贝 面试题3.64 GC是什么? 为什么要有GC? 面试题3.65 JVM垃圾回收机制和常见算法 面试题3.66 简单的介绍⼀下强引用&#xff0c;软引用&#xff0c;弱引用&#xff0c;虚引用 …

基于SSM消防物资存储系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;仓库管理&#xff0c;物资入库管理&#xff0c;仓位管理&#xff0c;物资详情管理&#xff0c;报警通知管理&#xff0c;安全检查提醒管理 用户账号功能包括&#xff1a;系统首页…

【数据分享】全国能源-电力平衡表(2000-2020年)

数据介绍 一级标题指标名称单位能源电力可供量亿千瓦小时能源电力生产量亿千瓦小时能源水电生产电力量亿千瓦小时能源火电生产电力量亿千瓦小时能源核电生产电力量亿千瓦小时能源风电生产电力量亿千瓦小时能源电力进口量亿千瓦小时能源电力出口量亿千瓦小时能源电力能源消费总量…

从零到一:如何使用直播美颜SDK开发视频美颜平台

今天&#xff0c;小编将为大家详细讲解如何从零开始&#xff0c;利用直播美颜SDK进行开发视频美颜平台。 一、了解直播美颜SDK 选择合适的SDK是开发视频美颜平台的第一步&#xff0c;市场上有多种SDK可供选择。选择时应考虑SDK的功能、性能、稳定性以及开发者社区的支持。 二…

[实时计算flink]本地运行和调试包含连接器的作业

本文为您介绍如何在开发者本地环境中运行和调试包含阿里云实时计算Flink版连接器的作业&#xff0c;以便快速验证代码的正确性&#xff0c;快速定位和解决问题&#xff0c;并节省云上成本。 背景信息 当您在IntelliJ IDEA中运行和调试Flink作业&#xff0c;如果其包含了阿里云…

Psychophysiology:脑-心交互如何影响个体的情绪体验?

摘要 情绪的主观体验与对身体(例如心脏)活动变化的情境感知和评估相关。情绪唤醒增加与高频心率变异性(HF-HRV)降低、EEG顶枕区α功率降低以及心跳诱发电位(HEP)振幅较高有关。本研究使用沉浸式虚拟现实(VR)技术来研究与情绪唤醒相关的脑心相互作用&#xff0c;以实现自然而可…