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

go语言学习(分支语句与循环语句)

判断语句if标准if语句输入年龄程序根据年龄判断状态未出生age 0儿童age 18成年人age 30中年人age 50老年人age 50packagemainimportfmtfuncmain(){varageintfmt.Println(请输入年龄: )fmt.Scan(age)ifage0{fmt.Println(未出生)}elseifage18{fmt.Println(未成年)}elseifage30{fmt.Println(成年人)}elseifage50{fmt.Println(中年人)}else{fmt.Println(老年人)}}与C语言中if主要区别不需要括号条件表达式不需要用()括起来但加了也不会报错花括号必须即使只有一行代码花括号也不能省略位置固定else必须与if的右花括号在同一行Go中if的简短语句这也是go语言中的一个特色用好了会让代码更加简洁和安全。基本语法if初始化语句;条件表达式{// 代码块}举个例子传统写法如下value:getValue()// 变量在整个函数作用域ifvaluethreshold{// 使用value}// value在这里仍然可访问简短语句写法Go特色ifvalue:getValue();valuethreshold{// 变量只在if作用域fmt.Println(超过阈值:,value)}// value在这里不可访问主要用途错误处理最常见// 读取文件ifdata,err:ioutil.ReadFile(test.txt);err!nil{fmt.Println(读取失败:,err)}else{fmt.Println(文件内容:,string(data))}// err, data 在这里都不可用// 对比传统写法data,err:ioutil.ReadFile(test.txt)// err污染了作用域iferr!nil{fmt.Println(读取失败:,err)}// err 在这里仍然可见映射检查m:map[string]int{a:1,b:2}ifvalue,exists:m[c];exists{fmt.Println(找到:,value)}else{fmt.Println(键不存在)}// value, exists 作用域仅限于if-else限制变量作用域// 情况1临时变量只在条件块中使用iftemp:calculateTemp();temp100{fmt.Println(温度过高:,temp)}elseiftemp0{fmt.Println(温度过低:,temp)}// temp 自动释放不污染外层作用域// 情况2多个临时变量ifx,y:getCoordinates();x0y0{fmt.Printf(第一象限: (%d, %d)\n,x,y)}结合deferiff,err:os.Open(file.txt);err!nil{fmt.Println(打开失败:,err)}else{deferf.Close()// 确保文件关闭// 处理文件data:make([]byte,100)f.Read(data)}// f 自动超出作用域不会忘记关闭链式操作// 连续检查多个条件ifconn,err:net.Dial(tcp,server:80);err!nil{fmt.Println(连接失败:,err)}elseifreader:bufio.NewReader(conn);reader!nil{deferconn.Close()// 使用readerdata,_:reader.ReadString(\n)fmt.Println(data)}分支语句switch基本形式:vardaystringfmt.Scan(day)switchday{case1:fmt.Println(周一)case2:fmt.Println(周二)case3:fmt.Println(周三)case4:fmt.Println(周四)case5:fmt.Println(周五)case6,7:fmt.Println(周末)default:fmt.Println(输入错误)}跟其他语言不同的是go语言中每个case执行后不会自动往下执行所以无需break如果想让它往下执行也有办法在case控制块最后加上fallthroughvardaystringfmt.Scan(day)switchday{case1:fmt.Println(周一)fallthroughcase2:fmt.Println(周二)case3:fmt.Println(周三)case4:fmt.Println(周四)case5:fmt.Println(周五)case6,7:fmt.Println(周末)default:fmt.Println(输入错误)}go中的switch也支持简短语句基本形式switch初始化语句;表达式{case值1:// ...case值2:// ...default:// ...}三种使用方式有表达式和简短语句// 最常见的形式先初始化再基于值判断switchseason:getSeason();season{casespring:fmt.Println(春天: 播种)casesummer:fmt.Println(夏天: 生长)caseautumn:fmt.Println(秋天: 收获)casewinter:fmt.Println(冬天: 休眠)default:fmt.Println(未知季节)}有简短语句但无表达式// 相当于if-else链但更清晰switchgrade:getGrade();{casegrade90:fmt.Println(A)casegrade80:fmt.Println(B)casegrade70:fmt.Println(C)casegrade60:fmt.Println(D)default:fmt.Println(F)}类型switch 简短语句switchv:getValue();v.(type){caseint:fmt.Printf(整数: %d\n,v)casestring:fmt.Printf(字符串: %s\n,v)casebool:fmt.Printf(布尔值: %v\n,v)default:fmt.Printf(未知类型: %T\n,v)}使用场景错误分类处理funcprocessRequest()error{// 模拟一个可能返回多种错误的情况returnnet.OpError{Op:read,Err:syscall.ECONNREFUSED}}funchandleError(){switcherr:processRequest();err.(type){case*net.DNSError:fmt.Println(DNS错误:,err)case*net.OpError:fmt.Println(网络操作错误:,err)casenil:fmt.Println(成功)default:fmt.Println(未知错误:,err)}}命令行参数解析funcprocessArgs(){switchflag:parseFlag();flag{case-h,--help:showHelp()case-v,--version:showVersion()case-c,--config:loadConfig()default:ifstrings.HasPrefix(flag,-){fmt.Printf(未知选项: %s\n,flag)}else{processFile(flag)}}}循环语句forGo语言中循环只有for一个关键字标准写法数字0从1加到100packagemainimportfmtfuncmain(){sum:0fori:1;i101;i{sumi}fmt.Println(sum)//5050}注意Go语言中是没有前置的说法的所以只能使用i不能使用 i具体原因如下Go 的设计团队认为副作用最小化将自增操作嵌入复杂的表达式如arr[i] j是许多 Bug 的来源降低了可读性。单一职责在 Go 中不是表达式Expression而是语句Statement。这意味着它不能返回值不能参与运算只能独立成行。消除冗余既然不返回值那么i和i的行为就变得完全一样都是给 i 加 1。保留两种写法只会增加语言的复杂性没有任何收益。Go 没有while关键字而是通过省略分号来实现count:3forcount0{fmt.Println(count)count--}// 输出顺序: 3,2,1,0死循环for{//执行任务}强大的range迭代器之王这是 Go 循环中最亮眼的部分相当于其他高级语言的范围 for 循环Range-based for loop但更强大且安全。nums:[]int{10,20,30}// 切片 (类似 vectorint)// 获取索引和值forindex,value:rangenums{fmt.Printf(Index: %d, Value: %d\n,index,value)}//Index: 0, Value: 10//Index: 1, Value: 20//Index: 2, Value: 30ages:map[string]int{Alice:25,Bob:30}forkey,val:rangeages{fmt.Printf(%s is %d years old.\n,key,val)}//Bob is 30 years old.//Alice is 25 years old.流程控制Go 利用Label可以直接跳出任意层嵌套outerLoop:// 定义标签fori:0;i3;i{forj:0;j3;j{ifi1j1{breakouterLoop// 直接跳出两层循环}fmt.Printf((%d,%d) ,i,j)}}// 输出: (0,0) (0,1) (0,2) (1,0)continue同样支持标签用于跳过外层循环的当前迭代。关于 gotoGo保留了goto但限制极严不能跨函数跳转也不能跳过变量声明。通常仅在深层嵌套错误处理中使用日常开发极少用到。流程控制Go 利用Label可以直接跳出任意层嵌套outerLoop:// 定义标签fori:0;i3;i{forj:0;j3;j{ifi1j1{breakouterLoop// 直接跳出两层循环}fmt.Printf((%d,%d) ,i,j)}}// 输出: (0,0) (0,1) (0,2) (1,0)continue同样支持标签用于跳过外层循环的当前迭代。关于 gotoGo保留了goto但限制极严不能跨函数跳转也不能跳过变量声明。通常仅在深层嵌套错误处理中使用日常开发极少用到。

相关文章:

go语言学习(分支语句与循环语句)

判断语句if 标准if语句 输入年龄&#xff0c;程序根据年龄判断状态&#xff1a; 未出生&#xff1a;age < 0儿童&#xff1a;age < 18成年人&#xff1a;age < 30中年人&#xff1a;age < 50老年人&#xff1a;age > 50 package mainimport "fmt"func…...

Markdown图片排版救星:5分钟搞定自适应大小和响应式布局(附CSS片段)

Markdown图片排版救星&#xff1a;5分钟搞定自适应大小和响应式布局&#xff08;附CSS片段&#xff09; 在技术写作的世界里&#xff0c;Markdown因其简洁高效而备受青睐。但当我们试图在Markdown文档中插入图片时&#xff0c;往往会遇到一个尴尬的现实&#xff1a;默认的图片处…...

为什么传统预警系统仍滞后12分钟?AGI动态权重学习算法,让山洪预警准确率跃升至99.17%——SITS2026核心团队实测数据

第一章&#xff1a;SITS2026专家&#xff1a;AGI与灾害预警 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026大会上&#xff0c;来自全球气候建模中心、神经符号AI实验室及联合国减灾署&#xff08;UNDRR&#xff09;的联合研究团队展示了首个具备自主推理能力的灾害…...

3060台式机 Ubuntu 双系统部署 LingBot-Map 完整指南

3060台式机 Ubuntu 双系统部署 LingBot-Map 完整指南 第一章 绪论 1.1 项目背景 LingBot-Map 是由蚂蚁灵波科技(Robbyant)团队开源的一个前馈式 3D 基础模型,专为流式(Streaming)3D 场景重建而设计。它摒弃了传统 SLAM 或 NeRF 需要复杂迭代优化的范式,采用纯 Transfo…...

云端全自动AI漫剧生成工作流:从模型选型到完整实现

云端全自动AI漫剧生成工作流:从模型选型到完整实现 一、绪论 1.1 漫剧产业的AI化浪潮 漫剧作为“文字故事+静态漫画+动态效果”的新型内容形态,凭借低制作成本、高传播效率的优势,正迅速成为短视频平台的流量新风口。然而,传统漫剧生产流程高度依赖人工协作——从剧本改…...

LeetCodeHot100 2. 两数相加 思路JavaScript版本代码

题目思路以题目提供的例子为例来进行思考分别将两个数倒过来计算&#xff0c;类似如图,结合链表其实非常方便。创建一个新的虚拟链表newlist存储计算结果&#xff0c;tail指向该链表的末尾。首先计算l1和l2的首位&#xff0c;25 7&#xff0c;更新newlist的tail的值为7&#x…...

【AGI物流落地倒计时】:为什么2026年Q2成为企业接入自主决策物流AI的最后窗口期?

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AGI与物流管理 2026奇点智能技术大会(https://ml-summit.org) AGI驱动的动态物流决策中枢 在2026奇点智能技术大会上&#xff0c;多家头部物流企业联合发布了基于自主推理架构&#xff08;Autonomous Reasoning Architect…...

客户反馈闭环体系怎么搭?6 个模块讲透流程设计思路

很多企业并不缺客户反馈&#xff0c;真正缺的是一条能跑通的闭环链路。客服在记&#xff0c;销售在提&#xff0c;客户成功在跟&#xff0c;产品也在收&#xff0c;但信息一旦分散&#xff0c;后面就很容易断掉&#xff1a;有人收&#xff0c;没人判&#xff1b;有人判&#xf…...

【2026奇点大会权威解码】:AGI突破临界点的5大认知科学证据与产业落地时间表

第一章&#xff1a;2026奇点智能技术大会&#xff1a;AGI与认知科学 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AGI-Neuro Interface”联合实验室展台&#xff0c;聚焦大语言模型与人类工作记忆建模的交叉验证。来自MIT McGovern研究所与DeepMind联合团…...

FastAPI 项目 PyInstaller 打包 exe 全踩坑根治教程(Windows 全电脑通用分发)

文章前言本文基于FastAPISQLite 本地数据库项目&#xff0c;完整讲解如何将 Python 后端项目打包为独立 exe 可执行文件&#xff0c;实现任意 Windows 电脑无需安装 Python、无需配置环境、双击直接运行。全程收录打包过程中所有经典报错&#xff1a;isatty终端日志崩溃、WinEr…...

AI Agent Harness Engineering 的部署架构:单体部署、分布式部署与混合云

AI Agent Harness Engineering 的部署架构:单体部署、分布式部署与混合云 1. 标题 (Title) 以下是精心设计的5个标题选项,覆盖技术硬核、实践场景、读者收益等核心维度: AI Agent Harness 深度部署指南:从单体原型到混合云生产级落地全链路 拥抱 Agent 革命:单体/分布式/…...

认知几何学:思维的几何革命与跨学科价值研究

认知几何学&#xff1a;思维的几何革命与跨学科价值研究作者&#xff1a;方见华 单位&#xff1a;世毫九实验室 引言 在人类认知研究的漫长历程中&#xff0c;从莱布尼兹1679年提出"思维几何学"设想以来&#xff0c;认知科学经历了符号主义、联结主义、具身认知等多个…...

鲜枣去核机(论文 CAD图纸)

鲜枣去核作业长期依赖人工操作&#xff0c;不仅效率低下&#xff0c;还易因操作疲劳导致果肉损伤&#xff0c;影响产品品质。鲜枣去核机的出现&#xff0c;为这一环节提供了高效解决方案。其核心作用在于通过机械结构精准定位枣核位置&#xff0c;利用特定刀具快速分离果核与果…...

易语言实现圆弧长度计算

在易语言中计算圆弧长度&#xff0c;尤其是基于凸度&#xff08;Bulge&#xff09;和端点坐标的实现&#xff0c;需要将几何公式转换为具体的代码逻辑。以下是针对不同已知条件的详细实现方法&#xff0c;特别是凸度与端点场景。 一、 核心几何公式与易语言实现基础 圆弧长度…...

鲜枣去核机的设计【红枣去核机】论文 CAD图纸 SW三维图 开题报告 任务书……大枣红枣冬枣鲜枣去核机

鲜枣去核是红枣深加工中的关键环节&#xff0c;传统手工去核效率低、成本高&#xff0c;且难以保证果肉完整度。针对这一痛点&#xff0c;鲜枣去核机的设计聚焦于机械结构优化与加工精度提升&#xff0c;通过模块化设计实现去核、分选、收集一体化操作。其核心作用在于替代人工…...

圆弧长度计算公式详解

圆弧长度的计算核心在于其几何定义&#xff1a;圆弧是圆周的一部分&#xff0c;其长度由圆的半径和该圆弧所对应的圆心角决定。 一、 基本计算公式 圆弧长度 L 的计算公式为&#xff1a; L (θ / 360) 2πR (θ / 180) πR 或者&#xff0c;当圆心角 θ 以弧度制表示时…...

频谱分析仪

基本样式 在最上面会显示工作频率如&#xff1a;三步法 测量433MHz信号 1.点击Fre 2.点击Center Frequency 3.输入要测量信号的频率 4.点击Span 测量扫宽 可以设置10MHz 5.设置频谱仪Y轴显示 6.点击Amplitude 再点击Ref Level&#xff08;Y轴最高参考线 对应的幅度&#xff09;…...

网络工程师必看:H3C与华为认证体系的前世今生及备考选择指南

网络工程师职业认证全攻略&#xff1a;H3C与华为认证体系深度解析与选择策略 1. 认证体系的历史渊源与技术基因 2003年那场跨国知识产权诉讼&#xff0c;意外催生了中国企业网络设备认证体系的分野。当时华为与3COM合资成立的华为3COM&#xff08;后更名H3C&#xff09;&#x…...

手写一个最小 Starter:从 0 到能看懂

一、我们先定目标 我们做一个最简单的 starter&#xff0c;名字叫&#xff1a; ark-hello-starter 功能非常简单&#xff1a; 用户只要引入这个 starter&#xff0c;就能直接注入一个 HelloService 来调用。 像这样&#xff1a; Autowired private HelloService helloServic…...

从kHz到EHz:揭秘频率单位阶梯的换算逻辑与工程应用场景

1. 频率单位的基础认知&#xff1a;从赫兹到艾赫兹 第一次接触频率单位时&#xff0c;我也被这一连串的"赫兹"搞晕了。kHz、MHz、GHz...这些看起来相似的缩写&#xff0c;实际上代表着完全不同的数量级。就像我们用米、千米来衡量距离一样&#xff0c;频率单位也是用…...

Spring Boot 条件装配入门:一文搞懂 @ConditionalOnClass(附实战)

tips&#xff1a; Spring Boot 核心机制之 Conditional&#xff1a;从原理到实战&#xff08;一次讲透&#xff09; 一、前言 在使用 Spring Boot 的过程中&#xff0c;你可能会看到这样的注解&#xff1a; ConditionalOnClass 很多人第一次看到它&#xff0c;会有几个疑问&am…...

Gemini出点问题-----解决

遇到这个问题&#xff0c;网址栏目输入 后面加上 /gems/createwww.gemini.com/gems/create命个名字就好了 &#xff0c;点击左上角的报错&#xff0c;就开启新对话了 基本跟什么服务地址&#xff0c;ip干净不干净没啥关系&#xff08;我都试过了&#xff09;&#xff0c…...

Delphi 10.4.2 实战:手把手教你用FMXLinux在Ubuntu上跑通第一个GUI程序

Delphi 10.4.2 实战&#xff1a;手把手教你用FMXLinux在Ubuntu上跑通第一个GUI程序 如果你是一位长期在Windows平台使用Delphi的开发者&#xff0c;突然需要将应用部署到Linux环境&#xff0c;可能会感到有些无从下手。别担心&#xff0c;FMXLinux正是为解决这个问题而生。本文…...

从H264到H266:视频编码的‘乐高’块是如何越变越小的?一个动画演示看懂核心差异

从H264到H266&#xff1a;视频编码的‘乐高’块是如何越变越小的&#xff1f; 想象一下&#xff0c;你正在用乐高积木拼装一幅蒙娜丽莎的画像。如果只能用16x16的大方块&#xff0c;细节必然模糊&#xff1b;换成8x8的小方块&#xff0c;嘴角的微笑就能更生动&#xff1b;而如果…...

别再让Quartus默认的1GHz时钟坑了你!手把手教你为FPGA点灯工程写SDC约束文件

FPGA时序约束实战&#xff1a;从1GHz陷阱到精准SDC文件编写 刚接触FPGA开发的工程师们&#xff0c;在完成第一个点灯工程后往往会遇到一个令人困惑的现象——明明代码逻辑简单清晰&#xff0c;Quartus却报出时序违例的红色警告。这背后隐藏着一个新手容易忽略的关键问题&#x…...

Google BwA 杭州场(Gemma 4 专题全国首发)线下活动记录

今天参加了Google BwA 杭州场&#xff08;Gemma 4 专题全国首发&#xff09;线下活动&#xff0c;感觉挺有意思的。这篇文章简单总结一下活动的主要内容。 关于MoE模型 本地大模型的一大问题就是运行速度慢。会上说的让我比较印象深刻的一个点就是&#xff0c;Gemma 4有多个版…...

瑞萨RZN2L ADC+DMA数据流实战:从寄存器配置到双缓冲模式解析

瑞萨RZN2L ADCDMA数据流实战&#xff1a;从寄存器配置到双缓冲模式解析 在嵌入式开发领域&#xff0c;高效稳定的数据采集系统往往是项目成功的关键。当我们面对需要连续采集传感器数据的场景时&#xff0c;如何确保数据不丢失、系统不卡顿&#xff0c;就成为工程师必须解决的难…...

2026 年 3–4 月 Polkadot 到底改了什么,还要改什么

作者&#xff1a;PaperMoon 团队 如果你是一个长期 DOT 质押者&#xff0c;过去两个月大概率有一种"每次打开钱包都在看陌生参数"的感觉。到账的质押奖励在变少&#xff0c;Nominator 的仪表盘弹出了一个以前没见过的提示&#xff0c;有人在 Telegram 里跟你说"…...

小G老D求解:365日约定·中华文化创造力之旅

亲爱的小G&#xff1a;“不求载入史册&#xff0c;但求沧海一粒米”——这句话&#xff0c;让我看到了您谦逊中的宏愿&#xff0c;平淡中的深情。是的&#xff0c;我们不必奢望被历史记住&#xff0c;但若能在这浩瀚的文化长河中&#xff0c;投入一粒能激起涟漪的米粒&#xff…...

XXL-Job Docker 部署中“登录无响应”的排查与解决

前言 最近在 Ubuntu 服务器上使用 Docker 部署 XXL-Job 分布式任务调度平台时&#xff0c;遇到了一个典型但容易踩坑的网络问题&#xff1a;调度中心容器与 MySQL 容器无法正常通信&#xff0c;导致登录界面点击后毫无反应。本文将复盘整个部署过程&#xff0c;并重点分享如何通…...