GoLong的学习之路(四)语法之循环语句
书接上回,上回说到运算符,这次我们说一个编程语言中最重要的一点:流程控制,及循环语句
文章目录
- 循环语句
- if else(分支结构)
- if条件判断特殊写法
- for(循环结构)
- for range(键值循环)
- switch case
- goto(跳转到指定标签)
- break(跳出循环)(标签)
- continue(继续下次循环)
循环语句
Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。
if else(分支结构)
Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。
if 表达式1 {分支1
} else if 表达式2 {分支2
} else{分支3
}
当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3
这里不需要像java一样将表达式放进括号里。就算放进去也会消失,并不报错。
import "fmt"func main() {score := 65if score >= 90 {fmt.Println("A")} else if score > 75 {fmt.Println("B")} else {fmt.Println("C")}
}

if条件判断特殊写法
if条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断。
func main() {if score := 65; score >= 90 {fmt.Println("A")} else if score > 75 {fmt.Println("B")} else {fmt.Println("C")}//fmt.Println(score)
}
与之上有什么问题?看下面

哈?报错了。其实也能理解,此时score从属于main的局部变量成为了if…else 的局部变量
for(循环结构)
Go 语言中的所有循环类型均可以使用for关键字来完成。
for 初始语句;条件表达式;结束语句{循环体语句
}
条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。
import "fmt"func main() {for i := 0; i < 10; i++ {fmt.Println(i)}
}
for循环的初始语句可以被忽略,但是初始语句后的分号必须要写
import "fmt"func main() {i := 0for ; i < 10; i++ {fmt.Println(i)}
}
for循环的初始语句和结束语句都可以省略。(此时类似与java的while)
import "fmt"func main() {i := 0for i < 10 {fmt.Println(i)i++}
}
for循环可以通过break、goto、return、panic语句强制退出循环。
for range(键值循环)
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。
通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回,索引和值。
- map返回,键和值。
- 通道(channel)只返回通道内的值(类似与队列)
func main() {var a = [...]string{"北京", "上海", "深圳"}// 方法1:for循环遍历for i := 0; i < len(a); i++ {fmt.Println(a[i])}// 方法2:for range遍历for index, value := range a {fmt.Println(index, value)}
}
switch case
使用switch语句可方便地对大量的值进行条件判断。
Go语言规定每个switch只能有一个default分支。
import "fmt"func main() {finger := 3switch finger {case 1:fmt.Println("A")case 2:fmt.Println("B")case 3:fmt.Println("C")case 4:fmt.Println("D")case 5:fmt.Println("E")default:fmt.Println("无效")}
}
这里与Java不同,java在美国case下必须要有break不然,就会运行出大问题(Bug与预期结果不符)
一个分支可以有多个值,多个case值中间使用英文逗号分隔。
import "fmt"func main() {switch n := 7; n {case 1, 3, 5, 7, 9:fmt.Println("奇数")case 2, 4, 6, 8:fmt.Println("偶数")default:fmt.Println(n)}
}
分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量
func main() {age := 30switch {case age < 25:fmt.Println("好好学习吧")case age > 25 && age < 35:fmt.Println("好好工作吧")case age > 60:fmt.Println("好好享受吧")default:fmt.Println("活着真好")}
}
fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。
import "fmt"func main() {s := "a"switch {case s == "a":fmt.Println("a")fallthroughcase s == "c":fmt.Println("c")case s == "b":fmt.Println("b")default:fmt.Println("...")}
}
结果

goto(跳转到指定标签)
goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。
func main() {var breakFlag boolfor i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if j == 2 {// 设置退出标签breakFlag = truebreak}fmt.Printf("%v-%v\n", i, j)}// 外层for循环判断if breakFlag {break}}
}
import "fmt"func main() {for i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if j == 2 {// 设置退出标签goto breakTag}fmt.Printf("%v-%v\n", i, j)}}return// 标签
breakTag:fmt.Println("结束for循环")
使用goto语句能简化代码,直接跳出循环
break(跳出循环)(标签)
break语句可以结束for、switch和select的代码块。(上面的例子其实就有,java语法中也存在)
break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。
import "fmt"func main() {
BREAKDEMO1:for i := 0; i < 10; i++ {for j := 0; j < 10; j++ {if j == 2 {break BREAKDEMO1}fmt.Printf("%v-%v\n", i, j)}}fmt.Println("结束")
}
按原本的不加标签的方式,break只会终止内循环,外循环在这个代码中一定会被判条件为否时,弹出。而此时,我们可以根据需要增加。
continue(继续下次循环)
continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。
在 continue语句后添加标签时,表示开始标签对应的循环。
func main() {
forloop1:for i := 0; i < 5; i++ {// forloop2:for j := 0; j < 5; j++ {if i == 2 && j == 2 {continue forloop1}fmt.Printf("%v-%v\n", i, j)}}
}
相关文章:
GoLong的学习之路(四)语法之循环语句
书接上回,上回说到运算符,这次我们说一个编程语言中最重要的一点:流程控制,及循环语句 文章目录 循环语句if else(分支结构)if条件判断特殊写法 for(循环结构)for range(键值循环) switch casegoto(跳转到指定标签)break(跳出循环…...
【Lua语法】字符串
Lua语言中的字符串是不可变值。不能像在C语言中那样直接改变某个字符串中的某个字符,但是可以通过创建一个新字符串的方式来达到修改的目的 print(add2(1 , 2 ,15,3))a "no one"b string.gsub(a , "no" , "on1111")print(a) print…...
程序员节的由来
早在2006年的时候 我就发现了 1024KB1MB 然后恰好又是2的10次方 那时候我就把这一天定义为程序员节了 不过当时并没有太多的知名度。 所以严格意义来讲 距历史记载,程序员应该是由我(田尚滨/cagy)发明的。 As early as 2006 I found …...
订水商城H5实战教程-03用户协议
目录 1 创建页面2 为文本组件增加事件3 检查用户协议是否勾选最终效果 我们上一篇介绍了打开首页时弹出登录窗口的功能,本篇我们实现一下用户协议。 1 创建页面 功能是点击用户协议的时候打开具体的协议内容,需要先创建一个页面。打开自定义应用&#x…...
淘宝app商品详情源数据API接口(解决滑块问题)可高并发采集
通过API接口采集淘宝商品列表和app商品详情遇到滑块验证码的解决方法(带SKU和商品描述,支持高并发),主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题,以后都可以使用本方法: 大家都…...
xcode15一直显示正在连接iOS17真机问题解决
前言 更新xcode15之后,出现了各种报错问题,可谓是一路打怪啊,解决一个报错问题又来一个。没想到到了最后还能出现一个一直显示正在连接iOS17真机的问题 一直显示正在连接iOS17真机的问题 问题截图如下: 解决方法 1. 打开De…...
stm32通过AT指令与esp8622通信
stm32通过AT指令与esp8622通信 文章目录 stm32通过AT指令与esp8622通信1.tcp通信2.mqtt通信 1.tcp通信 ATCWMODE1 设置为STA模式ATCWJAP_DEF"langtaotech","langtaotechXXX"ATCIPSTA? 查询ipATCIPMUX0 设置单连接ATCIPSTART"TCP","19…...
Flutter 类似onResume 监听,解决入场动画卡顿
在Flutter 实际开发过程中,页面数据往往是异步加载,接口请求回来后,数据刷新显示到界面上。 由于Flutter性能原因,也可能因为获取数据量比较大,在新页面路由进场动画执行过程中,接口请求结果回来了&#x…...
1024勋章
🌸关于重阳节的一些发疯日常(昨天的聊天记录,今天发系列)😅 🌸没错,发出来单纯觉得好玩儿😉(为了1024勋章😏)芜湖!...
C++栈、队列、优先级队列模拟+仿函数
目录 一、栈的模拟和deque容器 1.deque 1.1deque结构 1.2deque优缺点 2.stack模拟 二、队列的模拟 三、priority_queue优先级队列 1.优先级队列模拟 2.添加仿函数 一、栈的模拟和deque容器 在之前,我们学过了C语言版本的栈,可以看这篇文章 栈和…...
ES挂载不上怎么处理?
全文搜索 EelasticSearch安装 Docker安装 docker run -d --name es7 -e ES_JAVA_POTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v /home/206/es7/data/:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.14.0 …...
问题与分类
设计问题 是否已经有类似的解决方案,是否需要当前的设计设计思路的文档话,背景-》 设计思路-》 好处与不足 -》 其他设计思路的对比(淘汰其他设计思路的原因) 设计思路的评审,如何评审,如何量化ÿ…...
021-Qt 配置GitHub Copilot
Qt 配置GitHub Copilot 文章目录 Qt 配置GitHub Copilot项目介绍 GitHub Copilot配置 GitHub CopilotQt 前置条件升级QtGitHub Copilot 前置条件激活的了GitHub Copilot账号安装 Neovim 启用插件,重启Qt配置 GitHub Copilo安装Nodejs下载[copilot.vim](https://gith…...
如何使用 PostgreSQL 进行数据迁移和整合?
PostgreSQL 是一个强大的开源关系型数据库管理系统,它提供了丰富的功能和灵活性,使其成为许多企业和开发者的首选数据库之一。在开发过程中,经常会遇到需要将数据从一个数据库迁移到另一个数据库,或者整合多个数据源的情况。…...
Qt Signals Slots VS QEvents - Qt跨线程异步操作性能测试与选取建议
相关代码参考:https://gitcode.net/coloreaglestdio/qtcpp_demo/-/tree/master/qt_event_signal 1.问题的由来 在对 taskBus 进行低延迟改造时,避免滥用信号与槽起到了较好的作用。笔者在前一篇文章中,叙述了通过避免广播式地播发信号&…...
Postgres 和 MySQL 应该怎么选?
PostgreSQL和MySQL是两个流行的关系型数据库管理系统(DBMS)。它们都具有一些相似的功能,但也有一些区别。 在选择使用哪个DBMS时,需要考虑多个因素,包括性能、可扩展性、安全性、功能丰富度、生态系统支持等。下面是对…...
【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】
【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】 1、概述2、实验环境3、 物品说明4、参考资料与自我总结5、实验过程1、创建目录2、克隆下载文件3、 拉取子目录安装和交叉编译工具链等其他工具4、添加环境变量6、将样例文件拷贝到桌面…...
我终于搞明白了HTTPS协议了!超长文章!
HTTPS协议是现代互联网中非常重要的一种安全协议,它能够在客户端和服务器之间建立一条安全的通信渠道,确保用户的隐私和数据安全。下面我来详细介绍HTTPS协议的相关知识。 HTTP协议的缺点 HTTP协议是互联网中的一种应用层协议,它负责客户端…...
Golang Testify介绍
简介 Golang是一种编译型语言,由Google开发,已经成为了Web开发领域中非常受欢迎的语言之一。在Golang生态系统中,有许多用于编写测试的框架和库,其中Testify是其中一个非常流行的测试框架。 Testify是一个用于编写测试的扩展包&…...
DALL·E 3怎么用?DALL·E 3如何申请开通 ?DALL·E 3如何免费使用?AI绘画教程来喽~
一、引言 DALLE 3 是 OpenAI 在上个月(2023 年 9 月)发布的一个文生图模型。 相对于 Midjourney 以及 Stable Diffusion,DALLE 3 最大的便利之处在于,用户不需要掌握 Prompt 的写法了,直接自然语言描述即可。 甚至还…...
如何永久保存你的QQ空间记忆:GetQzonehistory完整备份指南
如何永久保存你的QQ空间记忆:GetQzonehistory完整备份指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经担心过,那些记录着青春岁月的QQ空间说说会随…...
破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南
破解3DS游戏格式兼容难题:3dsconv工具的技术实现与应用指南 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 问题…...
Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置
Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置 1. 引言 想象一下,你开发了一个超酷的复古像素风语音设计工具,用户只需要输入文字和语气描述,就能生成各种情绪饱满的AI配音。这个工具在本地测试时运行完美&a…...
新手零基础入门:用快马平台可视化学习openclaw核心配置
作为一名刚接触机器人开发的新手,我最近在学习openclaw机械爪的配置时遇到了不少困惑。那些抽象的参数名称和数值范围让我一头雾水,直到发现了InsCode(快马)平台的可视化学习方式,才真正理解了这些配置参数的实际意义。下面分享我的学习笔记&…...
5962-88769022A,兼容LSTTL/TTL/CMOS逻辑与6.4mA驱动能力的防抖动逻辑门光耦
简介今天我要向大家介绍的是 Broadcom 的光电耦合器——5962-88769022A。它的每一条通道都由一颗AlGaAs发光二极管和一颗带有迟滞阈值的高增益光子探测器组成。当输入端接收到2mA到8mA的微小电流时,LED便会发光。而接收端的探测器不仅负责捕捉光信号,其内…...
利用codex与快马平台,十分钟快速生成待办事项应用原型
最近在尝试快速验证一个待办事项应用的想法,发现用InsCode(快马)平台配合AI模型真的能十分钟就搞出可运行的原型。整个过程特别适合像我这样想快速验证产品概念的人,记录下具体操作和思考过程。 明确核心功能需求 首先梳理出最简功能清单:输入…...
暗物质探测造假:诺奖团队的数据污染事件
当“宇宙侦探”遭遇“数据幽灵”暗物质探测,堪称当代物理学最宏大的“宇宙侦探故事”。科学家们如同侦探,在浩渺的宇宙与深邃的地下实验室中,追踪着看不见的“嫌疑犯”——暗物质粒子留下的蛛丝马迹。国际空间站上的阿尔法磁谱仪、意大利格兰…...
一次性拖鞋自动下料系统设计超声波热熔裁剪机设计【论文+CAD图纸+solidworks三维+开题报告+任务书+实习调研报告+其它相关资料】
一次性拖鞋自动下料系统与超声波热熔裁剪机的设计,聚焦于提升拖鞋制造环节的效率与精度。传统拖鞋生产中,人工下料易受操作误差影响,导致材料浪费与产品尺寸偏差;而普通裁剪方式可能因热熔不充分,出现边缘毛刺或连接不…...
效率提升秘籍:在PyTorch-2.x-Universal-Dev环境里,这样用pyyaml和requests最省事
效率提升秘籍:在PyTorch-2.x-Universal-Dev环境里,这样用pyyaml和requests最省事 1. 引言:为什么这两个库值得关注 在深度学习项目开发中,我们常常把注意力集中在模型架构和训练算法上,却忽略了两个看似简单但极其重…...
忍者像素绘卷:天界画坊卷积神经网络原理与应用:解析像素风格生成内核
忍者像素绘卷:天界画坊卷积神经网络原理与应用 1. 卷积神经网络基础入门 在开始探索忍者像素绘卷的神奇世界之前,我们需要先了解支撑它的核心技术——卷积神经网络(CNN)。CNN就像一位精通像素艺术的数字画家,能够从原始图像中提取特征&…...
