今日、私はビジネスコード、事業コードでチャンネルデータを横断するとき、リターンがあるが、トラバースに復帰した後、たとえば、停止して参加しました:
package main
import (
"fmt"
"sync"
"time"
)
func consumer(cname string, ch chan int) {
//可以循环 for i := range ch 来不断从 channel 接收值,直到它被关闭。
for i := range ch {
time.Sleep(1*time.Second)
if i>20{
return
}
fmt.Println("consumer-----------", cname, ":", i)
}
fmt.Println("ch closed.")
}
func producer(pname string, ch chan int) {
for i := 0; i < 1000; i++ {
//time.Sleep(1*time.Second)
fmt.Println("producer--", pname, ":", i)
ch <- i
}
}
func main() {
//用channel来传递"产品", 不再需要自己去加锁维护一个全局的阻塞队列
ch := make(chan int,500)
go producer("生产者", ch)
for i:=0;i<5;i++ {
go consumer("消费者", ch)
}
time.Sleep(1000 * time.Second)
close(ch)
time.Sleep(10 * time.Second)
}
私が20よりも大きいたらチャンネルを通過するとき、パイプからの消費データは、継続的にリターンを入れて、最高のビジネスコードを入れていないので、止めもちろん、パニックも許可されていない、全く受け入れられません。