golang基础(22.跳转语句)
break 与 continue 语句
Go 语言支持在循环语句中通过 break 语句跳出循环,通过 continue 语句进入下一个循环。break 的默认作用范围是该语句所在的最内部的循环体:
package main
import "fmt"
func main() {
arr := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
num := arr[i][j]
if j > 1 {
break
}
fmt.Println(num)
}
}
}
continue 则用于忽略剩余的循环体而直接进入下一次循环的过程:
package main
import "fmt"
func main() {
arr := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr[i]); j++ {
num := arr[i][j]
if j > 1 {
break
} else {
continue
}
fmt.Println(num)
}
}
}
如果我们这样改写程序的话,上述代码不会打印任何值,因为 continue 语句会忽略后续代码直接进入下一个循环。
标签
Go 语言的 break 和 contine 与 PHP 的不同之处在于支持与标签结合跳转到指定的标签语句,从而改变这两个语句的默认跳转逻辑,标签语句通过标签+「:」进行声明:
package main
import "fmt"
func main() {
arr := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
BREAK1:
for i := 0; i < len(arr); i++ {
for j := 0; j <= len(arr[i]); j++ {
if j > 1 {
break BREAK1
}
fmt.Println(arr[i][j])
}
}
}
goto 语句
goto 语句被多数语言学者所反对,告诫大家不要使用,因为很容易造成代码逻辑混乱,容易导致不易发现的 bug。但 Go 语言仍然支持 goto 关键字,goto 语句的语义非常简单,就是跳转到本函数内的某个标签,如:
package main
import "fmt"
func main() {
arr := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
for i := 0; i < len(arr); i++ {
for j := 0; j <= len(arr[i]); j++ {
if j > 1 {
goto EXIT1
}
fmt.Println(arr[i][j])
}
}
EXIT1:
fmt.Println("goto exit")
}