【Go 基础篇】Go语言循环结构:实现重复执行与迭代控制
介绍
循环结构是编程中的重要概念,它允许我们重复执行一段代码块,或者按照一定的条件进行迭代控制。Go语言提供了多种循环结构,包括for、while和do-while等,用于不同的场景下实现循环操作。本篇博客将深入探讨Go语言中的循环结构,帮助读者更好地理解如何使用不同的循环结构,实现重复执行和迭代控制,以及在实际编程中的应用。
for 循环
for 循环是Go语言中最常用的循环结构,它可以用于实现固定次数的重复执行,也可以根据条件进行迭代控制。
基本的 for 循环
package mainimport "fmt"func main() {for i := 0; i < 5; i++ {fmt.Println(i)}
}
在上面的例子中,通过 for 循环打印出 0 到 4 的数字。
无限循环
package mainfunc main() {for {// 无限循环}
}
在上面的例子中,for 循环没有条件,因此会无限执行循环体。
for 与切片
package mainimport "fmt"func main() {numbers := []int{1, 2, 3, 4, 5}for index, value := range numbers {fmt.Printf("索引:%d,值:%d\n", index, value)}
}
在上面的例子中,通过 for range 循环遍历切片中的元素,获取索引和值。
for range 循环:遍历集合元素
在Go语言中,for range 循环是一种方便遍历集合(如数组、切片、映射、通道等)元素的方式。它可以同时获取元素的索引(或键)和值,使得遍历更加简洁和易读。
遍历切片
package mainimport "fmt"func main() {fruits := []string{"apple", "banana", "orange", "grape"}for index, fruit := range fruits {fmt.Printf("索引:%d,水果:%s\n", index, fruit)}
}
在上面的例子中,我们使用 for range 循环遍历了一个字符串切片 fruits,并通过 index 和 fruit 分别获取索引和值。
遍历映射
package mainimport "fmt"func main() {scores := map[string]int{"Alice": 90,"Bob": 85,"Charlie": 70,}for name, score := range scores {fmt.Printf("姓名:%s,分数:%d\n", name, score)}
}
在上面的例子中,我们使用 for range 循环遍历了一个映射 scores,并通过 name 和 score 分别获取键和值。
遍历通道
package mainimport ("fmt"
)func main() {queue := make(chan string, 2)queue <- "one"queue <- "two"close(queue)for item := range queue {fmt.Println(item)}
}
在上面的例子中,我们使用 for range 循环遍历了一个通道 queue,通道在遍历完所有数据后会自动关闭,避免死锁。
使用下划线 _ 忽略索引或值
有时候我们可能只需要其中的一部分信息,可以使用下划线 _ 来忽略不需要的索引或值。
package mainimport "fmt"func main() {numbers := []int{1, 2, 3, 4, 5}for _, number := range numbers {fmt.Println(number)}
}
在上面的例子中,我们使用 _ 来忽略了索引,只遍历了切片中的值。
for range 循环的注意事项
for range循环遍历切片、数组时,会返回索引和值。for range循环遍历映射时,会返回键和值。for range循环遍历通道时,会从通道中接收数据,直到通道被关闭。- 在遍历时,如果只需要索引而不需要值,可以使用
_来忽略。 for range循环遍历过程中,会复制集合中的元素,因此修改副本不会影响原集合。
通过灵活运用 for range 循环,我们可以更加方便地遍历集合中的元素,同时获取索引或键以及对应的值。这样的循环结构使得代码更加简洁和可读,提高了编程的效率。
while 循环
Go语言中没有明确的 while 关键字,但我们可以使用 for 循环来实现类似的效果。
package mainimport "fmt"func main() {i := 0for i < 5 {fmt.Println(i)i++}
}
在上面的例子中,我们使用 for 循环实现了类似 while 循环的效果,当 i 小于 5 时,执行循环体。
do-while 循环
Go语言中也没有明确的 do-while 关键字,但我们可以使用 for 循环来实现类似的效果。
package mainimport "fmt"func main() {i := 0for {fmt.Println(i)i++if i >= 5 {break}}
}
在上面的例子中,我们使用 for 循环实现了类似 do-while 循环的效果,先执行循环体,然后判断条件是否满足。
break 和 continue
在循环中,break 关键字用于终止循环,而 continue 关键字用于跳过当前循环,继续执行下一次循环。
package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i == 5 {break}if i%2 == 0 {continue}fmt.Println(i)}
}
在上面的例子中,当 i 等于 5 时,使用 break 终止循环;当 i 为偶数时,使用 continue 跳过当前循环,继续执行下一次循环。
循环的嵌套
循环可以嵌套在另一个循环中,以实现更复杂的逻辑控制。
package mainimport "fmt"func main() {for i := 1; i <= 3; i++ {for j := 1; j <= 3; j++ {fmt.Printf("i=%d, j=%d\n", i, j)}}
}
在上面的例子中,通过嵌套的 for 循环,打印出了所有可能的 i 和 j 的组合。
最佳实践与总结
循环结构是实现重复执行和迭代控制的重要工具,Go语言提供了多种循环结构,包括for、while和do-while等。在选择循环结构时,要根据实际需求和情况选择合适的循环类型,并注意循环条件、循环体和迭代控制等方面的逻辑。
在实际编程中,合理运用循环结构可以大大简化代码逻辑,提高代码的复用性和可维护性。无论是处理集合数据、重复任务、模拟场景还是实现其他逻辑,循环结构都是不可或缺的工具。通过学习不同的循环结构的用法和示例,您将更好地掌握如何使用循环来编写高效、功能完善的Go程序,为您的编程之旅增添色彩。
相关文章:
【Go 基础篇】Go语言循环结构:实现重复执行与迭代控制
介绍 循环结构是编程中的重要概念,它允许我们重复执行一段代码块,或者按照一定的条件进行迭代控制。Go语言提供了多种循环结构,包括for、while和do-while等,用于不同的场景下实现循环操作。本篇博客将深入探讨Go语言中的循环结构…...
RabbitMQ笔记-RabbitMQ基本术语
RabbitMQ基本术语 相关概念; 生产者(Producer):投递消息。消息:消息体(payload)标签(label);生产者把消息交给rabbitmq,rabbitmq会根据标签把消息发给感兴趣…...
Git向远程仓库与推送以及拉取远程仓库
理解分布式版本控制系统 1.中央服务器 我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地也就是在你的笔记本或者计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢? 那我们多人…...
PostgreSQL+SSL链路测试
SSL一个各种证书在此就不详细介绍了,PostgreSQL要支持SSL的前提需要打开openssl选项,包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户: mkdir -p /opt/ssl/private mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ss…...
服务器(容器)开发指南——code-server
文章目录 code-server简介code-server的安装与使用code-server的安装code-server的启动code-server的简单启动指定配置启动code-server code-server环境变量配置 code-server端口转发自动端口转发手动添加转发端口 nginx反向代理code-servercode-server打包开发版镜像 GitHub官…...
C++贪吃蛇(控制台版)
C自学精简实践教程 目录(必读) 目录 主要考察 需求 输入文件 运行效果 实现思路 枚举类型 enum class 启动代码 输入文件data.txt 的内容 参考答案 学生实现的效果 主要考察 模块划分 文本文件读取 UI与业务分离 控制台交互 数据抽象 需求 用户输入字母表示方…...
Java之字符串实践
功能概述 字符串是Java编程中常用的数据类型,本文对String部分常见功能做了对应实践以及分析。 功能实践 场景1:字符串比较 用例代码 Test public void test_string_compare() {String s1 "abc";String s2 s1;String s5 "abc&quo…...
BM20 数组中的逆序对
描述 解题思路:归并排序 分治:分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;“治”指的是将子问题单独进…...
高德猎鹰轨迹查询相关接口
高德猎鹰轨迹官网:服务管理-API文档-开发指南-猎鹰轨迹服务 | 高德地图API 轨迹查询 httpclient的post // post方法请求 创建轨迹 private static void createTrace() {String key "高德注册的key";String sid "服务id"; // 服务idString…...
整理总结新手开始抖音小店经营:常见问题及解决办法
抖音小店作为一种新兴的电商模式,在短时间内获得了广泛的关注和使用。然而,对于新手来说,抖音小店经营可能会遇到一些问题。下面是四川不若与众总结的一些常见的问题以及相应的解决办法。 问题一:产品选择困难 对于新手来说&#…...
4-1-netty
非阻塞io 服务端就一个线程,可以处理无数个连接 收到所有的连接都放到集合channelList里面 selector是有事件集合的 对server来说优先关注连接事件 遍历连接事件...
hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区
hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区 结论 在非严格模式下不开启动态分区的功能的参数(配置如下),同样也能进行动态分区数据写入,目测原因是不严格检查SQL中是否指定分区或者…...
java八股文面试[JVM]——JVM调优
知识来源: 【2023年面试】JVM性能调优实战_哔哩哔哩_bilibili...
FairyGUI-Unity 异形屏适配
本文中会修改到FairyGUI源代码,涉及两个文件Stage和StageCamera,需要对Unity的屏幕类了解。 在网上查找有很多的异形屏适配操作,但对于FairyGUI相关的描述操作很少,这里我贴出一下自己在实际应用中的异形屏UI适配操作。 原理 获…...
Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案
在启动oracle的服务OracleOraDb11g_home1TNSListener时,提示服务启动后又停止了。 解决方法: 修改oracle安装目录下的两个配置文件: 以上两个文件,对应的HOST的值,都改为127.0.0.1 然后再启动服务,启动成…...
Spring复习:(58)<context:annotation-config/>的作用
引入如下的BeanPostProcessor • ConfigurationClassPostProcessor • AutowiredAnnotationBeanPostProcessor • CommonAnnotationBeanPostProcessor • PersistenceAnnotationBeanPostProcessor • EventListenerMethodProcessor如果xml文件配置了bean中使用了Autowired注解…...
“东方杯”英特尔oneAPI黑客松大赛—参赛经验分享
目录 前言1、大赛要求2、oneMKL介绍3、准备 oneMKL基本使用1、下载:2、安装:3、初始化oneMKL环境:4、编译代码5、运行 所需的头文件使用oneMKL工具生成随机数使用fftw3计算FFT调用oneMKL API加速计算FFT对比两种方法的准确性输出结果结束语 前…...
win10家庭版远程桌面补丁_rdp wrapper
RDP Wrapper Library 就是可以帮你在 Windows 7、Windows 8、Windows 10 家庭版中打开远程桌面的工具。 1、把电脑上打开的安全软件与杀毒软件都关掉,因为这个远程桌面补丁会修改系统文件,所以安全软件可能会拦截。 2、下载RDP Wrapper Library补丁压缩…...
【C++设计模式】开放-封闭原则
2023年8月27日,周日下午 我觉得我的这篇博客还是写得很不错的,哈哈哈。 目录 概述举例说明用开放-封闭原则重构 概述 开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,也是许多…...
vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel
页面效果如下(echarts图表按需添加,以下代码中没有) 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
