Go04-控制结构
第3章控制结构3.1 条件语句if 语句// 基本语法不需要括号ifage18{fmt.Println(成年人)}// 条件语句可以包含初始化语句ifscore:getScore();score90{fmt.Println(优秀)}elseifscore60{fmt.Println(及格)}else{fmt.Println(不及格)}多条件判断// 使用 和 ||ifage18age65{fmt.Println(劳动年龄)}ifdaySaturday||daySunday{fmt.Println(周末)}错误处理中的 if// Go 的惯用错误处理模式result,err:doSomething()iferr!nil{fmt.Println(发生错误:,err)return}// 使用错误变量作用域iferr:doSomethingElse();err!nil{fmt.Println(错误:,err)}3.2 switch 语句基本 switch// 基本语法switchday{caseMonday:fmt.Println(星期一)caseTuesday:fmt.Println(星期二)caseWednesday,Thursday,Friday:fmt.Println(工作日)default:fmt.Println(其他)}无条件 switch// 可以省略条件变量相当于 if-else 链switch{casescore90:gradeAcasescore80:gradeBcasescore70:gradeCcasescore60:gradeDdefault:gradeF}类型 switch// 接口类型断言funcprintType(xinterface{}){switchx.(type){caseint:fmt.Printf(整数: %d\n,x)casefloat64:fmt.Printf(浮点数: %f\n,x)casestring:fmt.Printf(字符串: %s\n,x)default:fmt.Printf(未知类型: %T\n,x)}}fallthrough// 使用 fallthrough 强制执行下一个 caseswitchnum:1;{casenum0:fmt.Println(正数)fallthroughcasenum-10:fmt.Println(大于 -10)// 注意fallthrough 不会检查下一个 case 的条件}3.3 循环语句Go 只有for循环但支持多种循环模式。基本 for 循环// 标准 for 循环fori:0;i10;i{fmt.Println(i)}// 循环条件sum:0fori:1;i100;i{sumi}fmt.Println(1到100的和:,sum)while 循环模拟// Go 没有 while但可以用 for 模拟n:10forn0{fmt.Println(n)n--}// 无限循环for{// 使用 break 退出ifsomeCondition{break}}range 循环// 遍历切片fruits:[]string{苹果,香蕉,橙子}forindex,value:rangefruits{fmt.Printf(索引: %d, 值: %s\n,index,value)}// 只需要值for_,value:rangefruits{fmt.Println(value)}// 只需要索引fori:rangefruits{fmt.Println(i)}// 遍历 mapuser:map[string]int{张三:25,李四:30,}forname,age:rangeuser{fmt.Printf(%s: %d岁\n,name,age)}// 遍历字符串处理 Unicodefori,r:rangeHello, 世界{fmt.Printf(索引: %d, 字符: %c, Unicode: %U\n,i,r,r)}break 和 continue// break - 退出循环fori:0;i100;i{ifi5{break// 退出循环}fmt.Println(i)}// continue - 跳过当前迭代fori:0;i10;i{ifi%20{continue// 跳过偶数}fmt.Println(i)// 只打印奇数}// 标签 - 退出多层循环outer:fori:0;i10;i{forj:0;j10;j{ifi*j20{breakouter// 退出外层循环}fmt.Printf(%d ,i*j)}fmt.Println()}3.4 defer 语句defer用于延迟执行函数调用常用于资源清理funcreadFile(filenamestring)error{file,err:os.Open(filename)iferr!nil{returnerr}deferfile.Close()// 函数返回前执行// 处理文件...returnnil}defer 执行顺序funcmain(){// defer 是后进先出LIFOdeferfmt.Println(1)deferfmt.Println(2)deferfmt.Println(3)// 输出3, 2, 1}defer 与命名返回值funcdouble(xint)(resultint){deferfunc(){result*2}()// 修改返回值returnx}fmt.Println(double(3))// 输出63.5 练习编写程序判断一个数是否为素数使用 switch 实现一个简单的计算器使用 for 循环打印九九乘法表编写程序使用 defer 实现函数执行时间统计3.6 下一章下一章我们将学习 Go 语言的函数与方法。

相关新闻

硬件工程师八大细分岗位解析:从模拟设计到系统架构的职业选择

硬件工程师八大细分岗位解析:从模拟设计到系统架构的职业选择

作为一名硬件工程师,你是否曾经在职业发展道路上感到迷茫?面对众多岗位方向,不知道哪个最适合自己?或者刚入行时以为硬件工程师就是画板子、调电路,工作几年后才发现这个领域细分之深、方向之多远超想象? …

2026/7/16 22:57:41 阅读更多 →
HBase集群启动异常排查:HMaster进程缺失的深度诊断与修复

HBase集群启动异常排查:HMaster进程缺失的深度诊断与修复

1. HMaster进程缺失的典型表现与初步诊断当你启动HBase集群时发现Web UI的16010端口无法访问,或者通过jps命令查看不到HMaster进程,但RegionServer却正常运行,这就是典型的HMaster缺失场景。我遇到过最棘手的情况是集群所有服务"看起来&…

2026/7/16 22:55:39 阅读更多 →
通义灵码三大入口解析:网页版、IDE插件与私有化部署选型指南

通义灵码三大入口解析:网页版、IDE插件与私有化部署选型指南

1. 项目概述:这不是一个“下载链接汇总”,而是一次对AI编程助手落地形态的深度拆解通义灵码——这个名字在2024年程序员日常交流中出现的频率,已经不亚于“Git提交前记得跑一遍测试”这样的口头禅。它不是又一个悬浮在PPT里的概念产品&#x…

2026/7/16 22:55:39 阅读更多 →

最新新闻

终极指南:如何判断guided-diffusion扩散模型训练是否收敛

终极指南:如何判断guided-diffusion扩散模型训练是否收敛

终极指南:如何判断guided-diffusion扩散模型训练是否收敛 【免费下载链接】guided-diffusion 项目地址: https://gitcode.com/gh_mirrors/gu/guided-diffusion 你是否曾经花费数天时间训练扩散模型,却不知道何时该停止?想象一下&…

2026/7/16 23:41:56 阅读更多 →
IFC++:C++开源库实现BIM数据处理与可视化开发指南

IFC++:C++开源库实现BIM数据处理与可视化开发指南

1. 项目概述:IFC是什么,以及为什么你需要它如果你正在建筑、工程或施工(AEC)领域工作,或者对建筑信息模型(BIM)的数据处理感兴趣,那么你很可能听说过IFC文件。IFC,全称工…

2026/7/16 23:39:56 阅读更多 →
C++ Builder XE10演示项目:从RAD开发到多线程实战全解析

C++ Builder XE10演示项目:从RAD开发到多线程实战全解析

1. 项目概述:为什么需要一个“演示项目”?如果你是一位刚从Visual Studio或者Qt Creator转战到C Builder XE10的开发者,或者你是一位想快速评估这个IDE是否适合团队新项目的技术负责人,那么你很可能和我当初一样,面对一…

2026/7/16 23:37:55 阅读更多 →
Quartus Prime IP核授权破解:从特征码识别到License文件定制

Quartus Prime IP核授权破解:从特征码识别到License文件定制

1. Quartus Prime IP核授权机制解析在FPGA开发领域,IP核就像是现成的乐高积木块,能让我们快速搭建复杂系统。Altera(现Intel PSG)提供的IP核分为两大类:基础功能IP和高级功能IP。基础IP包括PLL、存储器控制器这些"…

2026/7/16 23:35:54 阅读更多 →
Spring Boot多模块打包进阶:剖析spring-boot-maven-plugin的依赖陷阱与双包策略

Spring Boot多模块打包进阶:剖析spring-boot-maven-plugin的依赖陷阱与双包策略

1. Spring Boot多模块项目中的依赖陷阱在Spring Boot多模块项目中,我们经常会遇到一个令人头疼的问题:当基础模块被打包后,其他依赖它的模块在编译或运行时却报"Class Not Found"或"Package does not exist"错误。这个问…

2026/7/16 23:35:54 阅读更多 →
ACE-Step UI:开源AI音乐创作引擎,释放无限创作潜能

ACE-Step UI:开源AI音乐创作引擎,释放无限创作潜能

ACE-Step UI:开源AI音乐创作引擎,释放无限创作潜能 【免费下载链接】ace-step-ui 🎵 The Ultimate Open Source Suno Alternative - Professional UI for ACE-Step 1.5 AI Music Generation. Free, local, unlimited. Stop paying for Suno! …

2026/7/16 23:33:53 阅读更多 →

日新闻

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

本篇深入剖析 ImportantDays 项目的数据持久化方案——基于 HarmonyOS ArkData 模块的 Preferences 轻量级存储,以及 PreferenceUtil 工具类的单例封装。一、HarmonyOS 数据存储方案对比 HarmonyOS 提供了多种数据存储方案:方案适用场景特点Preferences轻…

2026/7/16 0:08:27 阅读更多 →
Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

2026/7/16 0:08:27 阅读更多 →
鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

从鸿蒙 7(HarmonyOS NEXT)开始,官方全面完成了从 ohos.* 零散模块到 kit.* 领域套件的体系重构。对开发者来说,第一道门槛不是 API 用法变化,而是统一的导入规范——旧体系默认导入、解构导入混用的混乱局面被彻底终结…

2026/7/16 0:10:29 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/15 21:09:01 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/15 19:42:20 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻