掌握Go语言的流程控制:构建逻辑与决策的基石

ops/2024/12/23 7:41:40/

Go语言以其简洁明了的语法和强大的内置控制结构,为开发者提供了构建高效且逻辑清晰的程序的强大工具。Go的流程控制机制,从基本的条件判断到复杂的循环处理,是编写各类程序的基础。

本文将深入探讨Go语言中的流程控制机制,包括以下几点。

  • if判断:如何使用if语句进行条件控制。
  • for循环:for循环的基本用法和应用场景。
  • for-range循环:for-range循环在遍历数组、切片等集合时的独特优势。
  • for-in循环:for-in循环在迭代过程中的注意事项。
  • for循环****作用域:for循环中变量作用域的界定和使用技巧。
  • goto语句:goto语句的使用方式及其适用场景。
  • goto使用注意事项:在使用goto时需要避免的问题和潜在风险。
  • 实战应用:通过一个具体示例,展示如何使用for循环打印9×9乘法表,以加深对循环机制的理解和应用。

if判断

基本用法

 age := 20
if age > 18 {fmt.Println("你成年了")
} else {fmt.Println("你写作业去吧")
}

输出结果:你成年了。

多个判断条件 else if

 age := 20
if age > 35 {fmt.Println("人到中年")
} else if age > 18 {fmt.Println("青年")
} else {fmt.Println("少年")
}

输出结果:青年。

if判断中的作用域

还有一种特殊用法,作用域:即变量只在for循环内生效,不影响外部的变量。

 age := 20
if age := 15; age > 18 {fmt.Println("你成年了")
} else {fmt.Println("你写作业去吧")
}fmt.Println(age) 

输出结果:你写作业去吧 20

总结:打印的20是if判断外面定义的age :=20,如果我们没在if判断外定义age,是不能在if判断外打印age的。

for循环

了解了if语句的条件控制后,让我们进一步探索Go语言中的循环结构,特别是for循环的多种用法。

基本for循环

 for i := 0; i < 10; i++ {fmt.Println(i)
}

打印结果如下:

在这里插入图片描述

变形1:作用域问题

和上面讲if时一样,for也支持作用域设置,当我们的参数是从外部传入时可以这样写:省略for循环的第一个参数。

 i := 5
for ;i<10;i++ {fmt.Println(i)
}

打印结果如下:

在这里插入图片描述

变形2:第三个参数写到结构体内部

我们注意看i++的位置:

 i := 1
for i < 10 {fmt.Println(i)i++
}

打印结果如下:

在这里插入图片描述

无限循环模式

单写一个for关键字,不加任何条件,就是一个无限循环:

 for {fmt.Println("无限循环")
}

控制台一直无限循环的打印无限循环

在这里插入图片描述

在这里插入图片描述

for range 循环

这是我们最常用也是最好用的循环结构体:

 s := "hello王中阳"
for i, i2 := range s {fmt.Printf("ikey值为:%v,i2字符为:%c\n",i,i2)
}

打印结果如下:

在这里插入图片描述

跳出for循环之:break

遇到特定情况跳出for循环,不再继续执行时,使用break。

 for i := 0; i < 10; i++ {if i==5 {break}fmt.Println(i)
}
fmt.Println("打印结束")

打印结果如下:

在这里插入图片描述

跳出for循环之:continue

遇到特定情况跳出本次for循环,继续执行后面的for循环,使用continue。

 for i := 0; i < 10; i++ {if i == 5 {continue}fmt.Println(i)
}
fmt.Println("打印结束")

打印结果:我们可以发现下面的打印结果中只是没有打印5,只把i==5的循环跳过了。

在这里插入图片描述

跳出for循环之:goto

goto是一个非常灵活的用法,这里要重点看一下,很有用。

但是我个人不建议使用goto,因为会让代码变得难懂。了解goto的目的一是处理特殊场景,二是当别人这么写时我们能看懂,起码知道goto这个概念。

举个例子:我们设置一个双重for循环,当遇到C时就跳出循环,不再继续执行。

普通写法如下:

 flag := false
for i := 0; i < 10; i++ {for j := 'A'; j < 'Z'; j++ {if j == 'C' {flag = truebreak}fmt.Printf("%v-%c\n", i, j)}if flag {fmt.Println("over")break}
}

使用goto:

     for i := 0; i < 10; i++ {for j := 'A'; j < 'Z'; j++ {if j == 'C' {goto xx //跳转到定义的label语句,即直接跳出了for循环}fmt.Printf("%v-%c\n", i, j)}}// 定义label
xx:fmt.Println("over")

总结:用法其实很简单,当我们项目复杂时,合理的使用goto能简化代码;但是千万不要滥用goto,否则会导致代码晦涩难懂。

应用实战

下面让我们开通脑筋,打印9×9乘法表出来吧。

提示:双重for循环。

我的实战代码如下:

 for i := 1; i < 10; i++ {for j := 1; j <= i; j++ {fmt.Printf("%d * %d = %d  ", i, j, i*j)}fmt.Println()
}

打印结果如下:

在这里插入图片描述

总结

整体来说Go语言的if判断和for循环的使用还是非常简单的,需要注意作用域问题。至于跳出for循环的操作:break和continue与其他语言是一样的,也非常好理解。

关于for循环,除了打印9×9乘法表这类好玩的实战,还有哪些经典案例欢迎在评论区留言。


http://www.ppmy.cn/ops/108916.html

相关文章

Pytest(复习)

Pytest pytest插件 1.pytest pytest框架 2.pytest-html 生成html 3.pytest-xdist 多线程插件 4.pytest-ordering 控制测试用例的执行顺序 5.pytest-rerunfailures 失败重跑 6.pytest-allure 生成美观的测试报告将命令放入requirements.txt文件中 在执…

我的可视化表达引擎真高可用了

原来有这么多时间 六月的那么一天&#xff0c;天气比以往时候都更凉爽&#xff0c;媳妇边收拾桌子&#xff0c;边漫不经心的对我说&#xff1a;你最近好像都没怎么阅读了。 正刷着新闻我&#xff0c;如同被一记响亮的晴空霹雳击中一般&#xff0c;不知所措。是了&#xff0c;最…

原型模式prototype

此篇为学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/prototype 能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类 所有的原型类都必须有一个通用的接口&#xff0c; 使得即使在对象所属的具体类未知的情况下也能复制对象。 原型对…

使用 JAXB 将内嵌的JAVA对象转换为 xml文件

使用 JAXB 将内嵌的JAVA对象转换为 xml文件 1. 需求2. 实现&#xff08;1&#xff09;FileDesc类&#xff08;2&#xff09;MetaFileXml类&#xff08;3&#xff09;生成对应的xml文件 1. 需求 获取一个目录下所有文件的元数据信息&#xff08;文件名、大小、后缀等&#xff0…

A表和B表公共元素产生链表C

设A和B是两个单链表&#xff08;带头节点&#xff09;&#xff0c;其中元素递增有序。设计一个算法从A到B的公共元素产的C表&#xff08;交集&#xff09;&#xff0c;要求不破坏A&#xff0c;B的节点。 思想&#xff1a;依次比较A&#xff0c;B表中的元素&#xff0c;相同时&…

《Zookeeper 的监听机制及原理解析》

一、引言 在分布式系统中&#xff0c;协调和管理各个节点的状态是一项至关重要的任务。ZooKeeper 作为一个开源的分布式协调服务&#xff0c;被广泛应用于众多分布式系统中&#xff0c;如 Hadoop、HBase、Kafka 等。其中&#xff0c;ZooKeeper 的监听机制是其实现分布式协调的关…

交换技术是一种在计算机网络和通信系统中广泛应用的关键技术,它主要通过交换设备(如交换机、路由器等)实现数据的转发和传输

交换技术是一种在计算机网络和通信系统中广泛应用的关键技术&#xff0c;它主要通过交换设备&#xff08;如交换机、路由器等&#xff09;实现数据的转发和传输。交换技术的核心目的是在不同的设备之间高效地传输数据&#xff0c;实现信息的互联互通。 一、交换技术的定义 交换…

初识爬虫2

requests学习&#xff08;未更新完&#xff09;&#xff1a; 小技巧&#xff0c;如果你用的也是pycharm&#xff0c;对于控制台输出页面因为数据很长一行&#xff0c;不方便进行查看&#xff0c; 可以让它自动换行&#xff1a; 1.requests文档阅读学习链接&#xff1a;快速上…