Go语言中break label与goto label的区别


Posted in Golang onApril 28, 2021

与其他语言一样,Go语言也支持label(标签)语法:

分别是break label和 goto label

这样使得编程时变得异常灵活,但是由于在大项目中不好控制,所以建议能不使用goto label就不要使用

break label 和 goto label都能在循环中跳出循环,但是又有些不同之处。

首先说下break label,break的跳转标签(label)必须放在循环语句for前面,并且在break label跳出循环不再执行for循环里的代码。

Go语言中break label与goto label的区别

当我们把标签定义在break的下面时,

我们会发现运行时报错

Go语言中break label与goto label的区别

另外:break标签只能用于for循环

Go语言中break label与goto label的区别

而goto label的label(标签)既可以定义在for循环前面,也可以定义在for循环后面,当跳转到标签地方时,继续执行标签下面的代码。

label标签定义在for循环上面的情况

Go语言中break label与goto label的区别

label标签定义在for循环下面的情况

Go语言中break label与goto label的区别

补充:Go语言-break语句的标签用法

在go语言中,break语句后可以加上标签。如果加了标签,就会跳出标签对应的for循环。

package main
import (
 "fmt"
)
func main() {
 label1:
 for i := 0; i < 4; i++ {
  for j := 0; j < 10; j++ {
   if j == 2{
    break label1
   }
   fmt.Println("j = ", j)
  }
 }
}

输出为:

j = 0

j = 1

上面例子中,break后的标签label1指定的就是最外层的for循环,所以当j等于2时,直接结束了所有的循环。

ps:continue语句也支持标签功能

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
基于go interface{}==nil 的几种坑及原理分析
Apr 24 Golang
golang正则之命名分组方式
Apr 25 Golang
go语言中fallthrough的用法说明
May 06 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
Golang的继承模拟实例
Jun 30 Golang
golang的文件创建及读写操作
Apr 14 Golang
Golang 遍历二叉树
Apr 19 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
GO中sync包自由控制并发示例详解
Aug 05 Golang
golang 如何用反射reflect操作结构体
Apr 28 #Golang
golang 生成对应的数据表struct定义操作
Apr 28 #Golang
golang 如何通过反射创建新对象
Apr 28 #Golang
golang 实现两个结构体复制字段
Apr 28 #Golang
go结构体嵌套的切片数组操作
Apr 28 #Golang
golang json数组拼接的实例
Apr 28 #Golang
golang 实现对Map进行键值自定义排序
Apr 28 #Golang
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP5 面向对象程序设计
2008/02/13 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
使用Python进行目录的对比方法
2018/11/01 Python
python将list转为matrix的方法
2018/12/12 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
Python创建字典的八种方式
2019/02/27 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
Linux文件系统类型
2012/02/15 面试题
毕业生精彩的自我评价分享
2013/10/06 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
捐助感谢信
2015/01/22 职场文书
检讨书范文2000字
2015/01/28 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
前端JavaScript大管家 package.json
2021/11/02 Javascript
nginx lua 操作 mysql
2022/05/15 Servers