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 */