【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 …...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
