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

【Go 基础篇】Go语言循环结构:实现重复执行与迭代控制

介绍

循环结构是编程中的重要概念,它允许我们重复执行一段代码块,或者按照一定的条件进行迭代控制。Go语言提供了多种循环结构,包括forwhiledo-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,并通过 indexfruit 分别获取索引和值。

遍历映射

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,并通过 namescore 分别获取键和值。

遍历通道

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 循环的效果,先执行循环体,然后判断条件是否满足。

breakcontinue

在循环中,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 循环,打印出了所有可能的 ij 的组合。

最佳实践与总结

循环结构是实现重复执行和迭代控制的重要工具,Go语言提供了多种循环结构,包括forwhiledo-while等。在选择循环结构时,要根据实际需求和情况选择合适的循环类型,并注意循环条件、循环体和迭代控制等方面的逻辑。

在实际编程中,合理运用循环结构可以大大简化代码逻辑,提高代码的复用性和可维护性。无论是处理集合数据、重复任务、模拟场景还是实现其他逻辑,循环结构都是不可或缺的工具。通过学习不同的循环结构的用法和示例,您将更好地掌握如何使用循环来编写高效、功能完善的Go程序,为您的编程之旅增添色彩。

相关文章:

【Go 基础篇】Go语言循环结构:实现重复执行与迭代控制

介绍 循环结构是编程中的重要概念&#xff0c;它允许我们重复执行一段代码块&#xff0c;或者按照一定的条件进行迭代控制。Go语言提供了多种循环结构&#xff0c;包括for、while和do-while等&#xff0c;用于不同的场景下实现循环操作。本篇博客将深入探讨Go语言中的循环结构…...

RabbitMQ笔记-RabbitMQ基本术语

RabbitMQ基本术语 相关概念; 生产者&#xff08;Producer&#xff09;&#xff1a;投递消息。消息&#xff1a;消息体&#xff08;payload&#xff09;标签&#xff08;label&#xff09;&#xff1b;生产者把消息交给rabbitmq&#xff0c;rabbitmq会根据标签把消息发给感兴趣…...

Git向远程仓库与推送以及拉取远程仓库

理解分布式版本控制系统 1.中央服务器 我们⽬前所说的所有内容&#xff08;⼯作区&#xff0c;暂存区&#xff0c;版本库等等&#xff09;&#xff0c;都是在本地也就是在你的笔记本或者计算机上。⽽我们的 Git 其实是分布式版本控制系统&#xff01;什么意思呢? 那我们多人…...

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了&#xff0c;PostgreSQL要支持SSL的前提需要打开openssl选项&#xff0c;包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户&#xff1a; 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编程中常用的数据类型&#xff0c;本文对String部分常见功能做了对应实践以及分析。 功能实践 场景1&#xff1a;字符串比较 用例代码 Test public void test_string_compare() {String s1 "abc";String s2 s1;String s5 "abc&quo…...

BM20 数组中的逆序对

描述 解题思路&#xff1a;归并排序 分治&#xff1a;分治即“分而治之”&#xff0c;“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题&#xff0c;子问题继续按照这样划分&#xff0c;直到问题可以被轻易解决&#xff1b;“治”指的是将子问题单独进…...

高德猎鹰轨迹查询相关接口

高德猎鹰轨迹官网&#xff1a;服务管理-API文档-开发指南-猎鹰轨迹服务 | 高德地图API 轨迹查询 httpclient的post // post方法请求 创建轨迹 private static void createTrace() {String key "高德注册的key";String sid "服务id"; // 服务idString…...

整理总结新手开始抖音小店经营:常见问题及解决办法

抖音小店作为一种新兴的电商模式&#xff0c;在短时间内获得了广泛的关注和使用。然而&#xff0c;对于新手来说&#xff0c;抖音小店经营可能会遇到一些问题。下面是四川不若与众总结的一些常见的问题以及相应的解决办法。 问题一&#xff1a;产品选择困难 对于新手来说&#…...

4-1-netty

非阻塞io 服务端就一个线程&#xff0c;可以处理无数个连接 收到所有的连接都放到集合channelList里面 selector是有事件集合的 对server来说优先关注连接事件 遍历连接事件...

hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区

hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区 结论 在非严格模式下不开启动态分区的功能的参数&#xff08;配置如下&#xff09;&#xff0c;同样也能进行动态分区数据写入&#xff0c;目测原因是不严格检查SQL中是否指定分区或者…...

java八股文面试[JVM]——JVM调优

知识来源&#xff1a; 【2023年面试】JVM性能调优实战_哔哩哔哩_bilibili...

FairyGUI-Unity 异形屏适配

本文中会修改到FairyGUI源代码&#xff0c;涉及两个文件Stage和StageCamera&#xff0c;需要对Unity的屏幕类了解。 在网上查找有很多的异形屏适配操作&#xff0c;但对于FairyGUI相关的描述操作很少&#xff0c;这里我贴出一下自己在实际应用中的异形屏UI适配操作。 原理 获…...

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时&#xff0c;提示服务启动后又停止了。 解决方法&#xff1a; 修改oracle安装目录下的两个配置文件&#xff1a; 以上两个文件&#xff0c;对应的HOST的值&#xff0c;都改为127.0.0.1 然后再启动服务&#xff0c;启动成…...

Spring复习:(58)<context:annotation-config/>的作用

引入如下的BeanPostProcessor • ConfigurationClassPostProcessor • AutowiredAnnotationBeanPostProcessor • CommonAnnotationBeanPostProcessor • PersistenceAnnotationBeanPostProcessor • EventListenerMethodProcessor如果xml文件配置了bean中使用了Autowired注解…...

“东方杯”英特尔oneAPI黑客松大赛—参赛经验分享

目录 前言1、大赛要求2、oneMKL介绍3、准备 oneMKL基本使用1、下载&#xff1a;2、安装&#xff1a;3、初始化oneMKL环境&#xff1a;4、编译代码5、运行 所需的头文件使用oneMKL工具生成随机数使用fftw3计算FFT调用oneMKL API加速计算FFT对比两种方法的准确性输出结果结束语 前…...

win10家庭版远程桌面补丁_rdp wrapper

RDP Wrapper Library 就是可以帮你在 Windows 7、Windows 8、Windows 10 家庭版中打开远程桌面的工具。 1、把电脑上打开的安全软件与杀毒软件都关掉&#xff0c;因为这个远程桌面补丁会修改系统文件&#xff0c;所以安全软件可能会拦截。 2、下载RDP Wrapper Library补丁压缩…...

【C++设计模式】开放-封闭原则

2023年8月27日&#xff0c;周日下午 我觉得我的这篇博客还是写得很不错的&#xff0c;哈哈哈。 目录 概述举例说明用开放-封闭原则重构 概述 开放-封闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的一个重要原则&#xff0c;也是许多…...

vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel

页面效果如下&#xff08;echarts图表按需添加&#xff0c;以下代码中没有&#xff09; 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …...

2026最新测试评:论文AI率从90%降到10%?实测7款降ai率工具与4个手动技巧,【毕业党必看】

最近不少同学找我吐槽&#xff0c;明明是自己写了初稿、用AI辅助润色&#xff0c;一查降ai率却高得吓人。随着知网、维普、万方等平台的AI检测系统不断升级&#xff0c;论文降aigc已经和查重一样&#xff0c;成了毕业季的刚需。 很多学弟学妹们私信问我&#xff1a;“学姐到达…...

用VSCode替代Keil编辑器:嵌入式开发高效编码实战(附EIDE插件配置)

用VSCode重构嵌入式开发工作流&#xff1a;告别Keil编辑器的五大实战技巧 在嵌入式开发领域&#xff0c;Keil作为传统IDE长期占据主导地位&#xff0c;但其代码编辑功能却逐渐难以满足现代开发需求。当项目文件超过50个时&#xff0c;Keil的代码导航速度明显下降&#xff1b;缺…...

电源篇2——降压BUCK芯片的实战选型与设计考量

1. BUCK芯片选型的核心参数解析 第一次选BUCK芯片时&#xff0c;我看着密密麻麻的规格书参数直接懵了——效率95%、开关频率2MHz、最大电流3A...这些数字到底哪个最关键&#xff1f;后来踩过几次坑才明白&#xff0c;选型就像相亲&#xff0c;不能只看表面数据&#xff0c;得看…...

JS 开发问题:url.includes is not a function

在 JavaScript 开发中&#xff0c;出现如下错误信息 Uncaught TypeError: url.includes is not a function问题原因 这个错误是&#xff0c;尝试调用 url 的 includes 方法&#xff0c;但 url 不是一个字符串 问题复现 例如&#xff0c;url 是一个数字 let url 123;if (u…...

运维那些事儿(9):运维知识库,串联全流程的运维效率神器

前八期我们从IT资产管理、监控工具、U 位管理到自动化方案&#xff0c;搭建起了完整的精细化运维体系。但后台不少小伙伴反馈&#xff1a;“故障排查时翻记录半天找不到方案”“新人上手慢&#xff0c;老员工经验没法复用”“流程太多记混操作步骤”—— 这些痛点的核心&#x…...

使用org.redisson.api制作分布式锁

redis可以使用分布式锁的场景&#xff0c;redisson封装了该部分内容&#xff0c;下面看看怎么使用import lombok.extern.slf4j.Slf4j; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowire…...

项目文章 | Nat Commun四川农业大学发现增强水稻的雄蕊外露和杂种种子产量的机制

杂交水稻可大幅增产&#xff0c;但制种效率受限于不育系的低异交率。柱头外露率是决定异交率的关键性状&#xff0c;然而其遗传调控机制&#xff0c;特别是独立于粒形调控的直接通路&#xff0c;尚不明确。近期&#xff0c;四川大学水稻研究所团队在国际知名期刊Nature Communi…...

acados:革命性非线性最优控制求解器,嵌入式实时MPC的终极解决方案

acados&#xff1a;革命性非线性最优控制求解器&#xff0c;嵌入式实时MPC的终极解决方案 【免费下载链接】acados Fast and embedded solvers for nonlinear optimal control 项目地址: https://gitcode.com/gh_mirrors/ac/acados acados是一款专为非线性最优控制打造的…...

从零开始理解awesome-golang-algorithm:二叉树、链表、栈队列深度解析

从零开始理解awesome-golang-algorithm&#xff1a;二叉树、链表、栈队列深度解析 【免费下载链接】awesome-golang-algorithm :memo: LeetCode of algorithms with golang solution(updating). 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-golang-algorithm …...

如何快速学习数据科学:面向初学者的终极资源指南 [特殊字符]

如何快速学习数据科学&#xff1a;面向初学者的终极资源指南 &#x1f680; 【免费下载链接】Best-Data-Science-Resources This repository contains the best Data Science free hand-picked resources to equip you with all the industry-driven skills and interview prep…...