golang for select 循环跳出

执行以下代码,发现无法跳出for循环:

func SelectTest() {
	i := 0
	for {
		select {
		case <-time.After(time.Second * time.Duration(2)):
			i++
			if i == 5 {
				fmt.Println("跳出for循环")
			}
		}
		fmt.Println("for循环内 i=", i)
	}
	fmt.Println("for循环外")
}

解决办法有两个:

1.使用break:

func SelectTest() {
	i := 0
Loop:
	for {
		select {
		case <-time.After(time.Second * time.Duration(2)):
			i++
			if i == 5 {
				fmt.Println("跳出for循环")
				break Loop
			}
		}
		fmt.Println("for循环内 i=", i)
	}
 
	fmt.Println("for循环外")
 
}

 

2.使用goto:

func SelectTest() {
	i := 0
	for {
		select {
		case <-time.After(time.Second * time.Duration(2)):
			i++
			if i == 5 {
				fmt.Println("跳出for循环")
				goto Loop
			}
		}
		fmt.Println("for循环内 i=", i)
	}
Loop:
	fmt.Println("for循环外")
}

分析:

使用break lable 和 goto lable 都能跳出for循环;不同之处在于:break标签只能用于for循环,且标签位于for循环前面,goto是指跳转到指定标签处

你可能感兴趣的:(Go实战系列)