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语言使用select{}阻塞main函数介绍
Apr 25 Golang
golang 如何通过反射创建新对象
Apr 28 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
Golang 切片(Slice)实现增删改查
Apr 22 Golang
Golang解析JSON对象
Apr 30 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中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python调用其他文件函数或类的示例
2019/07/16 Python
学python安装的软件总结
2019/10/12 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
不用游标的SQL语句有哪些
2012/09/07 面试题
为什么需要版本控制
2016/10/28 面试题
技术总监管理职责范本
2014/03/06 职场文书
党员入党表决心的话
2014/03/11 职场文书
小学课外阅读总结
2014/07/09 职场文书
中秋节祝酒词
2015/08/12 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript