Descripción del problema
Si la solicitud es http muchos matriz, ID de servidor para obtener la matriz para realizar negocios, pero este negocio desde hace mucho tiempo para enseñar ejecutado, luego, no puede ejecutar el ciclo, múltiples dejó golang corrutina juegan un papel, pero creo que para algunos Identificación del resultado devuelto por un tratamiento especial, debe asegurarse de que todos los corrutina haber terminado la carrera con el fin de devolver un resultado, creo que el ID en el canal y luego a paso la idea más corrutina es correcto, pero para asegurarse de que todos los co-rutina de ejecución precisa sync.WaitGroup completo con toda la razón, tal vez hay una mejor manera, pero esto es lo que quiero ideas.
código
package main
import (
"fmt"
"sync"
)
func main() {
var ch chan int = make(chan int,10)
var wg sync.WaitGroup
var balance = [...]int{1,2,3,4,5,6,7,8,9}
j := 0
for m:=0;m< len(balance);m++{
ch <- balance[m]
wg.Add(1)
}
for n:=0;n< len(balance);n++ {
go func() {
s := <- ch
fmt.Println("s ",s)
if s==4||s==7 {
j++
}
defer wg.Done()
}()
}
wg.Wait()
fmt.Println("j ",j)
fmt.Println("执行完毕")
}
Cada uno del valor del canal se echa en un wg.Add (1), entonces el valor de cada canal será consumido Defer wg.Done (), hasta que es 0, wg.Wait () no representa todo corrutina la operación de espera más.
j Así, en la superficie final será impresa es 2, el resultado es correcto, por supuesto, sólo una j sencilla ++ operaciones de negocio, donde cualquier lógica de servicio puede llenar.