package main
import (
"fmt"
"time"
)
func producer(dataCh chan int, errCh chan error) {
defer close(dataCh)
for i := 0; i < 10; i++ {
if i == 5 { // 模拟网络请求失败异常
errCh <- fmt.Errorf("network request failed at %d", i)
return
}
dataCh <- i
time.Sleep(time.Millisecond * 100)
}
}
func consumer(dataCh chan int, errCh chan error) {
for {
select {
case data, ok := <-dataCh:
if!ok {
fmt.Println("channel closed, consumer stopped")
return
}
fmt.Printf("Received data: %d\n", data)
case err := <-errCh:
fmt.Printf("Producer error: %v, consumer stopped\n", err)
return
}
}
}
func main() {
dataCh := make(chan int)
errCh := make(chan error)
go producer(dataCh, errCh)
go consumer(dataCh, errCh)
time.Sleep(time.Second * 2)
}