goto 和 return | 学习笔记

简介: 快速学习 goto 和 return

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: goto 和 return 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9590


goto 和 return

目录:

一、goto 的介绍

二、基本语法

三、跳转控制语句 -return

四、说明

 

一、goto 的介绍

GOto 就是跳转到那里去的意思,goto 常用在会点语言,在高级语言里 goto 这种语法用得比较少。

1)go 语言的 goto 语句可以无条件地转移到程序中指定的行。(意味着它可以乱跳,只要给他一个标签就可以指定跳转到某个定位的地方去)

2)goto 语句通常通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。(也就是说通常和 if 语句配合)

3)在 GO 程序设计中(程序员开发)一般不主张使用 goto 语句,以免造成程序流程的混乱,使理解和调试程序都产生困难

(有一段时间甚至在行业里面 goto 是不好的设计,就不许使用 goto 了,后来发现 goto 语句并没有错误,而是使用者的问题,因此恢复使用了 goto,所以本身不是语言的问题而是人的问题,包括 go 语言也是支持 goto 的,但是很多设计员和专家认为尽量避免使用 goto,不是说不能用,只是尽量避免使用,因为 goto 语句容易造成程序流程的混乱,使理解和调试程序都产生困难,所以讲解 goto 语句呢就是想告诉大家 Go 语言是支持 goto 的,这是第一点。

第二点想告诉大家 goto 可以无条件地转移跳出循环到达指定位置;

第三点建议大家能不使用 goto 就不使用,至少讲解完 goto 后,面试官问你 go 语言里面可不可以用 goto,你不要说不支持使用,最好说除非迫不得已才用一下,但一般情况下就不用 goto 了,因为 goto 语句容易造成程序流程的混乱,使理解和调试程序都产生困难)

 

二、基本语法

goto 的基本语法是这样的,你给一个 label:

是自定义的,就是只要满足定义就可以写,goto 就是说当我们的程序执行到 goto后发现后面跟了一个 label(就是一个标签),就是会跳过代码,就是说这边的代码它就不执行了,直接从 goto label 跳转到 Label:statement 开始执行,那么他的一个流程图也比较简单,

代码开始执行,执行到 statement1 ,这里有一个 goto 的语句,如果写有一个 goto label3 ,那么就直接跳转到 statement3 ,也就是说 statement2 就不执行了。

流程图

image.png

快速入门案例

image.png

在 chapter05 新建一个文件夹 goto demo ,然后在 goto demo 新建一个 main go的文件夹,。

Package main

Import

“fmt”

)

Func main(){

var n int=10

//演示 goto 的使用

Fmt.println(“ok1”)

If  n>20{

Goto label1

Fmt.println(“ok2”)

Fmt.println(“ok3”)

Fmt.println(“ok4”)

Label1:

Fmt.println(“ok5”)

Fmt.println(“ok6”)

Fmt.println(“ok7”)

这样子会出现什么情况,当我们的代码执行到 Goto label1

的时候,

Fmt.println(“ok2”)

Fmt.println(“ok3”)

Fmt.println(“ok4”)

这三句代码就会跳过,就不执行了,直接跳转到 Fmt.println(“ok5”) 开始执行。

可以运行尝试一下看代码执行效果。

打个比方,有变量 var n int=10 ,一般会和if配合使用,因为不会无缘无故 goto 到 label 里面去。

如果输入 n=30,这时候 Goto label1 就会使用,Fmt.println(“ok2”)

Fmt.println(“ok3”)

Fmt.println(“ok4”)

这三句话就会被跳过。

最后一句话,尽量避免使用 goto,除非迫不得已。

 

三、跳转控制语句 -return

基本介绍

return 使用在方法(一般会使用在方法和函数中),表示跳出所在的函数或方法,在讲解函数的时候,会详细的介绍。

案例讲解

return 也是用来控制流程的,所以简单讲解一下。

用在函数或方法,表示跳出所在的函数或方法,来看一个简单的代码:

Func main(){

For i:=1; i<=10;i++{

If i==3{

Return

}

Fmt.println(“哇哇”,i)

}

Fmt.println(“HELLO world!”)

这个函数有一个 for 循环,for 循环里面做了一个判断 如果 i==3 就 return,这个 return 表示结束或者跳出这个 main 函数。

相当于结束这个程序了,也就是说 return 放在 main 的函数的,那就表示整个程序结束。

如果是放在别的函数,就是表示跳出这个函数,然后下面代码就不执行了。

它和 break 和 continue 还是不一样的。Break 是终止 for 循环,return 是无论下面怎么样都不执行了。Break 只是停止后面循环体的代码,但是 return 是通通不执行了。Return 比 break 和 continue 跳转和终止得更彻底。

 

四、说明

1)如果 return 是在普通函数,则表示跳出该函数及不在执行函数中 return 后面的代码,也可以理解为终止函数。

2)如果 return 实在 main 函数,表示终止 main 函数,也就是终止函数。

相关文章
|
网络安全 网络协议 网络架构
如何配置阿里云服务器防火墙?
虽然请求进去了,但是没有响应,我改了接口了,为何会这样,百思不得其解,幸好高人指点迷津。
28961 1
|
Web App开发 安全 Windows
解决:对COM 组件的调用返回了错误 HRESULT E_FAIL
  调用SHDOCVW(web浏览器) COM组件的时候,返回了错误 HRESULT E_FAIL。总结如下:     1. 在控制面板--->管理工具--->服务 中,开启Distributed Transaction Coordinator 服务。
7242 0
|
6月前
|
存储 安全 Java
String StringBuffer StringBuilder 区别详解与对比分析
本文详细解析了Java中String、StringBuffer和StringBuilder的区别,从可变性、线程安全性和性能三个方面进行对比,并结合具体应用场景分析了三者的适用范围。通过性能测试示例展示了它们在字符串拼接时的效率差异,同时提供了实际代码案例帮助理解。总结指出,String适合少量操作或线程安全场景,StringBuffer适用于多线程环境,而StringBuilder则在单线程下性能最优。开发者应根据需求选择合适的类以优化程序性能。文末还附有相关面试资料供参考。
1091 2
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术发展与应用实践(一文读懂AIGC)
AIGC(人工智能生成内容)是利用AI技术生成文本、图像、音频、视频等内容的重要领域。其发展历程包括初期探索、应用拓展和深度融合三大阶段,核心技术涵盖数据收集、模型训练、内容生成、质量评估及应用部署。AIGC在内容创作、教育、医疗、游戏、商业等领域广泛应用,未来将向更大规模、多模态融合和个性化方向发展。但同时也面临伦理法律和技术瓶颈等挑战,需在推动技术进步的同时加强规范与监管,以实现健康可持续发展。
|
11月前
|
存储 前端开发 JavaScript
深入理解 ECMAScript 2024 新特性:Promise.withResolvers
ECMAScript 2024 引入了 `Promise.withResolvers`,简化了手动创建 `Promise` 时管理 `resolve` 和 `reject` 的复杂性。本文详细介绍其设计背景、使用方式,并通过多个实际案例展示其优势。该方法减少了代码冗余和潜在错误,使异步任务管理更加直观和简洁。未来,这一特性有望为前端开发带来更多灵活性和便利性。
262 37
|
机器学习/深度学习 存储 Shell
shell 中匹配正则 字符串处理【整理版】
shell 中匹配正则 字符串处理【整理版】
336 4
|
存储 Oracle 关系型数据库
PolarDB-X 存储引擎核心技术 | Lizard B+tree 优化
PolarDB-X 分布式数据库,采用集中式和分布式一体化的架构,为了能够灵活应对混合负载业务,作为数据存储的 Data Node 节点采用了多种数据结构,其中使用行存的结构来提供在线事务处理能力,作为 100% 兼容 MySQL 生态的数据库,DN 在 InnoDB 的存储结构基础上,进行了深度优化,大幅提高了数据访问的效率。
7939 25
|
Linux 数据安全/隐私保护 Python
Linux下远程访问Jupyter Notebook 配置
Linux下远程访问Jupyter Notebook 配置
359 1
|
前端开发 安全 关系型数据库
PHP在Web开发中的应用及其优势###
【10月更文挑战第16天】 — 本文探讨了PHP在现代Web开发中的广泛应用及其显著优势。通过分析PHP的核心特性,如灵活性、易用性和广泛的应用支持,阐述了为何PHP成为众多开发者和公司的首选技术。文章还介绍了PHP与其他编程语言的比较,并展望了其未来的发展趋势。 ###
231 2