golang循环跳转语句

iXiAo9 · · 748 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang循环跳转语句

跳转语句 goto break continue

  • 三个语法都可以配合标签使用

  • 标签名区分大小写,若不使用会造成编译错误

  • break与continue配合标签可用于多层循环的跳出

  • goto是调整执行位置,与其他2个语句配合标签使用的结果不同

break

func main() {
LABEL1:
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                fmt.Println(i)
                break LABEL1
            }
        }
    }
    fmt.Println("执行结束")
}

输出结果

API server listening at: 127.0.0.1:5587
4
执行结束
Process exiting with code: 0

添加LABEL1标签必须要使用

break必须配合标签使用,break后不加LABEL1标签会报错

不添加LABEL1标签break默认跳出for i := 0; i < 10; i++ {这层循环

goto

func main() {
LABEL1:
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                fmt.Println(i)
                goto LABEL1
            }
        }
    }
    fmt.Println("执行结束")
}

输出结果

4
4
4
4
4
4

无限循环,当触发got LABEL1标签的时候跳转到LABEL1的位置再次触发了循环

如果你要使用goto可以把LABEL1标签放到循环后

func main() {
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                fmt.Println(i)
                goto LABEL1
            }
        }
    }
    LABEL1:
    fmt.Println("执行结束")
}

输出结果

API server listening at: 127.0.0.1:29183
4
执行结束
Process exiting with code: 0

continue

触发后跳过本次循环,继续执行下次循环

func main() {
LABEL1:
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                fmt.Println(i)
                continue LABEL1
            }
        }
    }
    fmt.Println("执行结束")
}

输出结果为无限循环

我们更改一下

func main() {
LABEL1:
    for i := 0; i < 10; i++ {
        for {
            fmt.Println(i)
            continue LABEL1
        }
    }
    fmt.Println("执行结束")
}

输出结果

0
1
2
3
4
5
6
7
8
9
执行结束
Process exiting with code: 0
解析
func main() {
LABEL1:
    for i := 0; i < 10; i++ {
        for {
            fmt.Println(i)
            continue LABEL1
        }
    }
    fmt.Println("执行结束")
}

continue LABEL1换成goto LABEL1结果会一样吗?

func main() {
LABEL1:
    for i := 0; i < 10; i++ {
        for {
            fmt.Println(i)
            goto LABEL1
        }
    }

    fmt.Println("执行结束")
}

输出结果为

0
0
0
0
0
0

不一样 goto 不会跳过for语句


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:iXiAo9

查看原文:golang循环跳转语句

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

748 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传