Wang-Kai/cherish-today

Go 语言中 label 的使用

Wang-Kai opened this issue · 0 comments

问题场景:

package main

import "fmt"

func main() {
	for _, i := range []string{"a", "b"} {
		fmt.Printf("Outer ==> %s\n", i)

		for _, j := range []int{1, 2, 3} {
			fmt.Printf("Inner ==> %d\n", j)
			if j == 2 {
				break
			}
		}
	}
}

开发中会遇到循环嵌套的场景,有时候的需求是:当在内部循环内,如果条件不满足,希望连外部循环也跳出,但简单的 break 操作仅能跳出一层循环,代码输出:

$ go run main.go

Outter ==> a
Inner ==> 1
Inner ==> 2
Outter ==> b
Inner ==> 1
Inner ==> 2

这个时候就需要使用 label 了,使用 OuterLoop 定义外部的 for 循环 label,然后在 break 后加上要跳出的 label。

package main

import "fmt"

func main() {
OuterLoop:
	for _, i := range []string{"a", "b"} {
		fmt.Printf("Outter ==> %s\n", i)

		for _, j := range []int{1, 2, 3} {
			fmt.Printf("Inner ==> %d\n", j)
			if j == 2 {
				break OuterLoop
			}
		}
	}
}

代码输出:

$ go run main.go

Outter ==> a
Inner ==> 1
Inner ==> 2

参考