本文原文:http://golang.iswbm.com

Github:https://github.com/iswbm/GolangCodingTime

Go里的流程控制方法还是挺丰富,整理了下有如下这么多种:

  • if - else 条件语句
  • switch - case 选择语句
  • for - range 循环语
  • goto 无条件跳转语句
  • defer 延迟执行

前面三种,我已经都讲过了,今天要讲讲 goto 的无条件跳转。

很难想象在 Go 居然会保留 goto,因为很多人不建议使用 goto,所以在一些编程语言中甚至直接取消了 goto。

我感觉 Go 既然保留,一定有人家的理由,只是我目前还没感受到。不管怎样,咱还是照常学习吧。

0. 基本模型

goto 顾言思义,是跳转的意思。

goto 后接一个标签,这个标签的意义是告诉 Go程序下一步要执行哪里的代码。

所以这个标签如何放置,放置在哪里,是 goto 里最需要注意的。

goto 标签;
...
...
标签: 表达式;

1. 最简单的示例

goto 可以打破原有代码执行顺序,直接跳转到某一行执行代码。

import "fmt"func main() {goto flagfmt.Println("B")
flag:fmt.Println("A")}

执行结果,并不会输出 B ,而只会输出 A

A

2. 如何使用?

goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。

这边举一个例子,用 goto 的方式来实现一个打印 1到5 的循环。

import "fmt"func main() {i := 1
flag:if i <= 5 {fmt.Println(i)i++goto flag}
}

输出如下

1
2
3
4
5

再举个例子,使用 goto 实现 类型 break 的效果。

import "fmt"func main() {i := 1for {if i > 5 {goto flag}fmt.Println(i)i++}
flag:
}

输出如下

1
2
3
4
5

最后再举个例子,使用 goto 实现 类型 continue的效果,打印 1到10 的所有偶数。

import "fmt"func main() {i := 1
flag:for i <= 10 {if i%2 == 1 {i++goto flag}fmt.Println(i)i++}
}

输出如下

2
4
6
8
10

3. 注意事项

goto语句与标签之间不能有变量声明,否则编译错误。

import "fmt"func main() {fmt.Println("start")goto flagvar say = "hello oldboy"fmt.Println(say)
flag:fmt.Println("end")
}

编译错误

.main.go:7:7: goto flag jumps over declaration of say at .main.go:8:6


好了,今天的文章就到这里了。

若今天的分享对你有帮助,不如点个赞,支持一下?

goto语句_11. Go语言流程控制:goto 无条件跳转相关推荐

  1. c语言循环次数控制,3 C语言 流程控制 循环 跳转

    3 C语言 流程控制 循环 跳转 选择: if switch 循环   while,do while ,for ,嵌套 跳转 break goto continue 第3章流程控制 学习目标 u掌握选 ...

  2. R语言入门4---R语言流程控制

    ​ 流程控制语句在任何语言中都是非常重要的,通过流程控制语句编程者能够根据业务逻辑在程序中设计合理的循环.分支,实现程序各种各样强大的功能.一般实现任一算法的控制结构都可以分为顺序结构.分支结构.循环 ...

  3. c语言goto语句用法_C语言中的goto语句该不该使用?

    关于C语言的goto语句存在很多争议,很多书籍都建议"谨慎使用,或者根本不用".这里先不做过多的讨论,存在即合理,既然是C语言中的一个知识点,我们还是有必要学会使用.先看一些got ...

  4. c语言goto语句用法_C语言的9种控制结构

    点击蓝字关注我哦 C语言语句 goto语句:无条件转向; if语句:判断语句;while循环语句; do-while语句:先执行循环体,然后判断循环条件是否成立. 之后继续循环;for语句:循环,可替 ...

  5. c语言goto语句用法_C语言32个关键字9种控制语句34种运算符整理

    相信这么努力的你 已经星标了我 老九学堂 你身边的IT导师 32个关键字,如下表所示: 关键字 说明 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声 ...

  6. 江哥带你玩转C语言 | 07 - C语言流程控制

    流程控制基本概念 默认情况下程序运行后,系统会按书写顺序从上至下依次执行程序中的每一行代码.但是这并不能满足我们所有的开发需求, 为了方便我们控制程序的运行流程,C语言提供3种流程控制结构,不同的流程 ...

  7. go for 循环遍历数组并排序_10. Go语言流程控制:for 循环

    本文原文:http://golang.iswbm.com Github:http://github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下 ...

  8. golang for循环_10. Go语言流程控制:for 循环

    本文原文:http://golang.iswbm.com Github:http://github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下 ...

  9. 511遇见易语言流程控制返回和结束和销毁

    返回()是易语言中常用的命令,但对返回值的类型控制我们有时候并不是很清楚,教程用了四个例子讲解了返回,二结束和销毁更是容易混淆的两个命令,视频分别做了演示. 511遇见易语言教程 一.官方源码 返回 ...

最新文章

  1. Linux下安装 boost 库
  2. CISCO NAT 经典配置合集
  3. 更改sybase下设备名
  4. Linux之父为过去的言行道歉,宣布离开社区反思
  5. python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里
  6. Linux服务器配置PHP文件下载,出现中文乱码问题,下载出错
  7. Spring体系结构详解
  8. preg_grep用法
  9. php wdatepicker,WdatePicker时间控件的使用
  10. c语言中time 0 返回值,clock()返回值为什么是0
  11. 使用php发送Http请求,抓取网页数据
  12. PHP图像处理:3D图纸、缩放、回转、剪下、水印(三)
  13. c++ 迭代器++和+1_C ++中的迭代器简介
  14. UCC国际洗衣:风雨26年,铸就干洗行业实力品牌
  15. 自定义Angular服务
  16. 用GIF图片来告诉大家程序猿的真实生活
  17. 基础VLAN划分(思科)
  18. 光机电一体化实训考核装置
  19. 淘宝/天猫获取商品历史价格信息 API 返回值说明
  20. 毛笔书法艺术作品,能不能写简化字?

热门文章

  1. Swift傻傻分不清楚系列(十)枚举
  2. java运算符 —(5)
  3. 操作系统原理之文件系统(第五章)
  4. Python 执行代码的两种方式
  5. C#最简单最完整的webservice实例
  6. [Postgres]Postgres复制表
  7. Node.js Web 开发框架大全《中间件篇》
  8. go strconv
  9. Istio流量管理实践之(5): 使用cert-manager部署Istio自定义入口网关及进行证书管理...
  10. 猜1-10的数字python脚本