Golang退出多层循环可以使用goto、break 标签实现,具体demo如下
package main
import (
"time"
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(2)
go func() {
gotoTest()
wg.Done()
}()
go func() {
breakTest()
wg.Done()
}()
wg.Wait()
}
//goto 退出多层循环
func gotoTest() {
ticker := time.NewTicker(time.Second * 2)
timer := time.NewTimer(time.Second*9)
for {
select {
case <-ticker.C:
fmt.Println("====ticker goto====")
case <-timer.C:
fmt.Println("goto exit")
goto exit
}
}
exit:
ticker.Stop()
timer.Stop()
fmt.Println("goto test over!")
}
//break 退出多层循环
func breakTest() {
ticker := time.NewTicker(time.Second * 2)
timer := time.NewTimer(time.Second*9)
cycle:
for {
select {
case <-ticker.C:
fmt.Println("*********ticker break********")
case <-timer.C:
fmt.Println("break exit")
break cycle
}
}
ticker.Stop()
timer.Stop()
fmt.Println("break test over!")
}