volver problemas al atravesar el canal golang

Hoy me uní al atravesar el canal de datos en un código de negocio, código de negocio, hay retorno, pero después de un retorno a la travesía se detuvieron, por ejemplo:

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)
}

Una vez que i es mayor que 20, los datos de consumo de la tubería se detuvieron de forma continua, por lo que cuando se atraviesa el canal de no poner el mejor código de negocio, poner un retorno es totalmente inaceptable, por supuesto, tampoco está permitido el pánico.

Publicados 169 artículos originales · ganado elogios 224 · vistas 260 000 +

Supongo que te gusta

Origin blog.csdn.net/sureSand/article/details/86495706
Recomendado
Clasificación