go语言控制流

46、Go语言控制流探秘:if、for、switch实战解析 本文深入探讨了Go语言的控制流语句,包括if、for和switch。通过实际案例,我们了解了这些语句在不同场景下的应用,如条件判断、循环执行和多分支选择。同时,我们还分享了使用这些控制流语句的技巧,如短路评估、无限循环和倒计时循环。通过学习这些内容,读者可以更好地理解和运用Go语言的控制流语句,提高编程效率。 阅读详情

if-else 结构

• 可省略条件表达式括号。
• ⽀持初始化语句,可定义代码块局部变量。
• 代码块左⼤括号必须在条件表达式尾部。

x := 0
// if x > 10 // Error: missing condition in if statement
// {
// }
if n := "abc"; x > 0 { // 初始化语句未必就是定义变量,⽐如 println("init") 也是可以的。
 println(n[2])
} else if x < 0 { // 注意 else if 和 else 左⼤括号位置。
 println(n[1])
} else {
 println(n[0])
}

注意:不⽀持三元操作符 “a > b ? a : b”。
注意:关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规的。

For

⽀持三种循环⽅式,但while并不是go的关键字,不能用来写循环。

s := "abc"
for i, n := 0, len(s); i < n; i++ { // 常⻅的 for 循环,⽀持初始化语句。
 println(s[i])
}
n := len(s)
for n > 0 { // 替代 while (n > 0) {}
 println(s[n]) // 替代 for (; n > 0;) {}
 n--
}
for { // 替代 while (true) {}
 println(s) // 替代 for (;;) {}
}

不要期望编译器能理解你的想法,在初始化语句中计算出全部结果是个好主意。

func length(s string) int {
 println("call length.")
 return len(s)
}
func main() {
 s := "abcd"
 for i, n := 0, length(s); i < n; i++ { // 避免多次调⽤ length 函数。
 println(i, s[i])
 }
}

输出:
call length.
0 97
1 98
2 99
3 100

Range

类似迭代器操作,返回 (索引, 值) 或 (键, 值)。可忽略不想要的返回值,或⽤ “_” 这个特殊变量。

s := "abc"
for i := range s { // 忽略 2nd value,⽀持 string/array/slice/map。
 println(s[i])
}
for _, c := range s { // 忽略 index。
 println(c)
}
for range s { // 忽略全部返回值,仅迭代。
 ...
}
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { // 返回 (key, value)。
 println(k, v)
}

注意: range 会复制对象。

a := [3]int{0, 1, 2}
for i, v := range a { // index、value 都是从复制品中取出。
 if i == 0 { // 在修改前,我们先修改原数组。
 a[1], a[2] = 999, 999
 fmt.Println(a) // 确认修改有效,输出 [0, 999, 999]。
 }
 a[i] = v + 100 // 使⽤复制品中取出的 value 修改原数组。
}
fmt.Println(a) // 输出 [100, 101, 102]。

在多数情况下,建议改⽤引⽤类型,其底层数据不会被复制,能提高程序的负载性能

s := []int{1, 2, 3, 4, 5}
for i, v := range s { // 复制 struct slice { pointer, len, cap }。
 if i == 0 {
 s = s[:3] // 对 slice 的修改,不会影响 range。
 s[2] = 100 // 对底层数据的修改。
 }
 println(i, v)
}

输出:
0 1
1 2
2 100
3 4
4 5

Switch

分⽀表达式可以是任意类型,不限于常量。可省略 break,默认⾃动终⽌。

x := []int{1, 2, 3}
i := 2
switch i {
 case x[1]:
 println("a")
 case 1, 3:
 println("b")
 default:
 println("c")
}

输出:
a

如需要继续下⼀分⽀,可使⽤ fallthrough,但不再判断条件。

x := 10
switch x {
case 10:
 println("a")
 fallthrough
case 0:
 println("b")
}

输出:
a
b

Goto, Break, Continue

⽀持在函数内 goto 跳转。标签名区分⼤⼩写,未使⽤标签引发错误。

func main() {
 var i int
 for {
 println(i)
 i++
 if i > 2 { goto BREAK }
 }
BREAK:
 println("break")
EXIT: // Error: label EXIT defined and not used
}

配合标签,break 和 continue 可在多级嵌套循环中跳出。

func main() {
L1:
 for x := 0; x < 3; x++ {
L2:
 for y := 0; y < 5; y++ {
 if y > 2 { continue L2 }
 if x > 1 { break L1 }
 print(x, ":", y, " ")
 }
 println()
 }
}

输出:
0:0 0:1 0:2
1:0 1:1 1:2
注意:break 可⽤于 for、switch、select,⽽ continue 仅能⽤于 for 循环。

13、掌握Go语言控制流:循环、分支与错误处理 本文深入探讨了Go语言的控制流语句,包括for循环、break、continue、switch和defer。通过实际应用场景和代码示例,我们了解了这些语句的工作原理和用法,以及如何利用它们提高代码的可读性和效率。这些控制流语句是编程的基础,对于想要学习和使用Go语言的开发者来说,掌握它们是至关重要的。 阅读详情

相关推荐

Go语言中的控制流程

简单介绍GO语言中的控制流程

禅与代码的艺术 1246

Go语言编程笔记3:控制流

Go语言编程笔记3:控制流 图源:2zyyyyy.github.io 一般来说,不同的编程语言之间控制流语句的差别应该是很小的,但Go语言的控制流语句有很多不同之处,值得单独进行讨论。 if 除了和其它语言类似的写法以外,Go语言可以在if语句的条件中添加赋值语句: package main import "fmt" func main() { if a := 6; a < 10 { fmt.Println("a<10") } } 当然上边这段示例的写法是没必要的,更常见的是通过

梦幻天空 215

Go语言break与continue控制流深度解析

在编程语言中,break和continue是基础但关键的流程控制语句,其行为本质取决于所处语法块的类型与嵌套层级。Go语言严格限定二者仅作用于for、switch和select三类语句块,并通过innermost规则和显式标签机制实现精准跳转,这既规避了C系语言的歧义风险,也对开发者提出了更清晰的结构化要求。理解其底层原理,有助于避免无限循环、状态错乱、资源泄漏等典型线上故障;在高并发、实时日志、边缘计算等工程场景中,合理使用可提升系统稳定性与可观测性。本文聚焦Go语言中break与continue的真实边

weixin_32956805的博客 269

Go 语言:控制流程

Go 语言提供了两种主要的选择语句:if 和 switch。if 语句有三种形式:简单 if、if-else 和 if-else if-else,用于根据条件执行不同的代码块。if 语句可以包含初始化语句,且条件必须为布尔类型。switch 语句用于从多个选项中选择执行,支持多个 case 值、fallthrough 关键字以及条件表达式。此外,switch 也可以包含初始化语句。Go 语言的循环仅通过 for 语句实现,其结构包括初始化、条件和后置操作。这些控制流程语句为 Go 提供了灵活的逻辑控制能力。

无忧 798

【Go语言从新手到高手】初阶篇-第2章 基础语法 2.2 控制流

在 Go 语言中,if 语句用于条件判断,控制程序的执行流程。if 语句可以单独使用,也可以嵌套使用,以处理更复杂的逻辑。以下是关于 Go 中 if 语句及其嵌套的详细介绍。

走向CTO的路上... 831

掌握控制流的艺术:Go语言中的if、for和switch语句

在Go语言的编程世界中,控制流语句是构建程序逻辑的基石。if语句、for循环和switch语句是我们最常用的控制流工具,它们让我们能够根据不同的条件执行不同的代码块。本文将深入探讨这些语句的使用方法、技术细节和实际案例,帮助读者在实际编程中更加得心应手。

yonggeit的博客 3082

Go语言控制流程(2)

在Go语言的语句中,是一个特殊的关键字。在其他语言(如C、Java)的语句中,每个分支默认会贯穿执行,即执行完一个后会继续执行下一个,除非使用语句来终止。而在Go语言中,语句的分支默认是不会贯穿执行的,每个执行完后就会自动跳出语句。关键字的作用就是打破这种默认行为,让程序继续执行下一个分支。下面是一个简单的示例代码,展示了语句的使用: 1.3 代码解释 在上述代码中,我们定义了一个变量并赋值为2。 进入语句,由于的值为2,所以执行分支,打印出“数字是2”。 由于分支中使用了语句,程序会继续执行下一个分支,

m0_73558214的博客 1362

学习使用Go语言(Golang):构建高效可靠的软件

Go语言(Golang)是一种现代化的编程语言,由谷歌开发,旨在提供高效性、可靠性和可扩展性。它具有简洁的语法和强大的并发支持,适用于构建各种类型的应用程序,从小型命令行工具到大型分布式系统。请注意,这只是一个基础的入门指南,Go语言还有很多其他功能和特性,如错误处理、数据结构、包管理等。为了更深入地学习Go语言,你可以参考官方文档和其他学习资源,进行更广泛和系统的学习。的字符串通道,并在一个goroutine中发送消息到通道,然后在主goroutine中接收并打印收到的消息。的函数,该函数在控制台输出。

syntax_bug609的博客 133

【GO语言基础】控制流

【GO语言基础】控制流。

信安是不可或缺的一部分! 494

Go语言基础:控制流与函数使用

本文详细介绍了Go语言中的控制流结构,包括if条件语句、switch语句、for循环以及如何使用range进行数据迭代。同时,对函数的定义和调用进行了示例解析,以帮助读者更好地理解和应用Go语言的基础知识。

weixin_42592399的博客 425

三菱FX3U PLC红绿灯ST编程实战:从基础逻辑到急停功能完整实现

本文以十字路口红绿灯控制为例,详细讲解了三菱FX3U PLC使用ST编程的完整实战过程。内容涵盖从基础时序逻辑、状态机设计,到急停功能、黄灯闪烁、昼夜模式切换等高级功能的实现,并提供了代码优化与调试技巧,帮助工程师掌握结构化文本在工业控制中的清晰、结构化应用。

weixin_29070861的博客 535

go语言输入输出与控制流

记录一下自己的学习过程,顺带水片文章

aliveriver的博客 397

别再手动连线了!用Tessent IJTAG的SIB和TDR,5分钟搞定复杂芯片的DFT网络分区

本文探讨了如何利用Tessent IJTAG的SIB(Segment Insertion Bit)和TDR(Test Data Register)技术,高效解决复杂芯片DFT网络分区问题。通过智能化的扫描链管理和声明式定义,显著降低连接复杂度,提升测试覆盖率和良率,适用于超大规模SoC设计。

weixin_29251131的博客 304

换个语言学一下 Golang (6)——控制流程

换个语言学一下 Golang (6)——控制流程 Go语言的控制结构关键字只有if..else if..else,for和switch。 而且在Go中,为了避免格式化战争,对程序结构做了统一的强制的规定。看下下面的例子。 请比较一下A程序和B程序的不同之处 A程序 package main import ( "fm...

weixin_30662011的博客 88

初识Renode

1. 简介 Renode是Antmicro公司发布的一个开发框架,使得开发人员通过模拟物理硬件系统(包括CPU、外围设备、传感器、环境以及节点之间的有线或无线介质),加速物联网和嵌入式系统的开发。它可在PC上通过软件对嵌入式设备进行模拟,可模拟Cortex-M、Cortex-A、RISC-V和其他CPU,并可模拟外设以及各种通信总线和接口。其指令模拟器使用C语言开发,外设模拟器使用C#语言开发,测试及输出层面的内容则用python编写。 Renode官网:Renodehttps://renode.io/

牧羊女 5296

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2279

GO语言控制流程示例

1.1 基础结构与短声明Go的if语句允许在条件中直接声明变量,这是其他语言不具备的特性。示例:文件读取时的安全判断if1.2 嵌套条件与逻辑运算符Go支持&&(与)、||(或)、!(非)三种逻辑运算符实战案例:用户权限验证系统。

m0_73558214的博客 445

华为S5700三层交换机VLAN配置避坑指南:为什么你的VLAN间无法互通?

本文针对华为S5700三层交换机VLAN间无法互通的典型故障,提供深度排障指南。文章从数据转发原理入手,系统梳理了从物理链路、VLAN配置、VLANIF接口状态、路由表到ARP表、MTU及安全策略等全链路检查点,并给出了清晰的排查命令与流程,帮助网络工程师快速定位并解决VLAN间路由问题,实现稳定互通。

tt34567的博客 875

Go语言进阶:控制流、函数与数据结构

在前文中,我们已经介绍了Go语言的环境搭建、基础语法以及变量和数据类型。在本文中,我们将继续深入学习Go语言的控制流语句、函数定义与使用,以及数组、切片和映射等数据结构。这些是Go语言编程的核心内容,掌握它们将使你能够编写更加复杂和实用的Go程序。

欢迎来到智能安全前线!这里是AI与信息安全交汇之地。我们以代码为武器,深入大模型攻防实战,破解系统漏洞。追踪OpenAI、Meta前沿动态,用红蓝对抗思维,锻造智能时代的坚盾与利矛。 697

UE5 蓝图节点图文大全(300+蓝图,9万字+)

本文采用虚幻5.2.1版本,以图文的方式对蓝图节点进行介绍,包括蓝图节点的输入输出参数解释,并有中英文节点名称可参考。

一碗清深的博客 2万+

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1735

GO语言学习笔记3—控制流程

if语句 在之前学习的编程语言和平时编写代码的过程中运用最多的语句可能就是if了 所以在此对if 的作用不做介绍仅仅针对go语言中if的使用方法做一下介绍 现在来看一下go中的一段if代码 package main import("fmt") fun main(){ b := true if b { fmt.Println("b is true!") } } 程序解读: 声明变量b并将其初始化为true,这个变量被推断为布尔类型 使用一条if语句判断b是否为true 由于这条if语句的结果为

青布衫白少年的博客 219

从入门到精通:Cursor使用全攻略

Cursor是一款基于VSCode深度定制的AI编程工具,由Anysphere公司开发。它将AI技术与代码开发深度融合,能够理解自然语言指令并生成高质量代码,支持代码补全、跨文件上下文理解等功能。本文详细介绍了Cursor的安装设置、界面导航、基本操作和Composer模式等核心功能,并提供了高效提示词写作技巧和实际应用案例(如浏览器插件开发、复杂表单组件构建等)。文章还总结了使用注意事项和常见问题解决方案,展望了AI编程工具的发展前景。Cursor通过智能代码生成和项目理解能力,显著提升了开发效率,适合各

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 6460

Go语言控制流语句

本篇文章深入讲解Go语言的流程控制语句,包括条件判断、循环、跳转和选择结构。掌握这些语句是编写逻辑复杂程序的基础。

星航夜空的帆舟 229

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

go语言—控制流程

第 14 行,默认情况下循环只能一层一层退出,为此就需要设置一个状态变量 breakAgain,需要退出时,设置这个变量为 true。第 15 行,标签只能被 goto 使用,但不影响代码执行流程,此处如果不手动返回,在不满足条件时,也会执行第 18 行代码。代码说明:第 12 行将结束当前循环,开启下一次的外层循环,而不是第 8 行的循环。第 16 行,使用 break 退出当前循环,执行后,代码调转到第 20 行。第 10 行,使用 goto 语句跳转到指明的标签处,标签在第 17 行定义。

fanfjaiyun的博客 165

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: go语言基本数据类型和变量
下一篇: go函数使用
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值