当前位置: 首页 > 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 …...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

uniapp获取当前位置和经纬度信息

1.1. 获取当前位置和经纬度信息&#xff08;需要配置高的SDK&#xff09; 调用uni-app官方API中的uni.chooseLocation()&#xff0c;即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...