利用break 標籤跳出for select循環

package main

import (
	"fmt"
	"time"
)

func main() {
	strChan := make(chan int, 1)

	n := 0

	// 生產者不停的生產,若是通道有數據,就會把消費者喚醒
	go func() {
		for {
			fmt.Println("loop")
			time.Sleep(time.Second)
			n++
			if n%5 > 2 {
				strChan <- n
			}

			if n > 10 {
				strChan <- -1
				break
			}
		}
	}()

	// 消費者
ForBreak:
	for {
		select {
		// 若是沒有信息到來,則會阻塞到select上
		case data := <-strChan:
			fmt.Println(data)
			if data == -1 {
				break ForBreak
			}
		}

		fmt.Println("for loop")
	}

	fmt.Println("end")
}

/*
loop
loop
loop
loop
3
for loop
loop
4
for loop
loop
loop
loop
loop
8
for loop
loop
9
for loop
loop
-1
end
 */
相關文章
相關標籤/搜索