package main
import "fmt"
func main() {
//go传统方式退出多层循环
var breakAgain bool
//外层循环
for x:=0;x<10 ;x++ {
println("外层")
//内层循环
for y:=0;y<10 ;y++ {
//当满足某个条件时
if y==2 {
println("。。。")
//设置退出标记
breakAgain = true
//退出本次循环
break
}
}
//根据标记,继续退出循环
if breakAgain{
break
}
}
println("执行完毕--------")
//优化代码使用goto
//外层循环
for x:=0;x<10 ;x++ {
println("外层")
//内层循环
for y:=0;y<10 ;y++ {
//当满足某个条件时
println("。。。")
if y==2 {
println("2")
//设置退出标记
goto breakHere
}
}
}
//手动返回,避免进入标签
return//只能被goto使用,不影响代码执行流程,此处如果不手动返回,在不满足条件时,也会执行24行
//定义返回标签
breakHere:
println("123")
//多处错误处理存在代码重复时是非常棘手的
err :=firstCheckError()//执行某个逻辑,返回错误
if err!=nil {//如果发生错误,打印错误
fmt.Printf(err)
exitProcess()
return
}
err = secondCheckError()
if err !=nil{
fmt.Println(err)
exitProcess()
return
}
//go语言实现同样的逻辑
err =firstCheckError()
if err!=nil{
goto onExit //跳转到onexit
}
err = secondCheckError()
if err != nil {
goto onExit//跳转onexit
}
fmt.Println("Done")
return
onExit:
fmt.Printf(err)//汇总所有流程进行错误打印并退出进程
exitProcess()
}