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语言map与string的相互转换的实现
Apr 07 Golang
Go语言使用select{}阻塞main函数介绍
Apr 25 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
golang通过递归遍历生成树状结构的操作
Apr 28 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
深入理解go slice结构
Sep 15 Golang
Go语言特点及基本数据类型使用详解
Mar 21 Golang
Go归并排序算法的实现方法
Apr 06 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Go语言编译原理之变量捕获
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
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
Javascript开发包大全整理
2006/12/22 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python3写入文件常用方法实例分析
2015/05/22 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
python日期相关操作实例小结
2019/06/24 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
区域总监的岗位职责
2013/11/21 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
2014年维稳工作总结
2014/11/18 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Python一些基本的图像操作和处理总结
2021/06/23 Python
浅谈JavaScript作用域
2021/12/06 Javascript
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技