2017-05-06 1 views
-1

Ich habe eine goroutine for-Schleife in einer Lauf:Wie schließe ich alle Goroutinen, die "schlafen"?

func main(){ 
      for _, i := range x{ 
       go httpRequests(i, ch) 
      } 

      for i := range ch{ 
       print i 

     } 
    } 

func httpRequests(i, ch){ 
      for _, x := range y{ 
       go func(string x){ 
        do something with i 
        ch <- result 
       }(x) 
      } 


      } 

Wenn ich laufen, dass er sagt, alle goroutines schlafen. Irgendwelche Vorschläge?

+0

Sie müssen tatsächlichen Code zeigen. – Volker

+0

Ich denke, mein Beispielcode im obigen Link ist genug, um mich zu starten. Wenn Sie diesen Code ausführen, können Sie sehen, dass er dieselbe Ausgabe druckt. Was ich will ist Iterieren durch die IDs und drucken sie alle – shishh03

+1

Ich habe nicht die Zeit, diesen Code zu debuggen, aber ich schlage vor, Sie lesen das ganze Dokument: https://github.com/golang/go/wiki/ CommonMistakes # using-goroutines-on-loop-iterator-Variablen –

Antwort

2

Sie haben 3 Göroutinen (go serviceReq(i, httpCh)) gestartet, die ihnen einen Kanal übergeben haben. Und dann erhalten Sie auf diesem Kanal nur einmal (ch := (<-httpCh).serviceData).

Anstatt, dass Sie in einer Schleife erhalten sollen:

for resp := range httpCh { 
    output = append(output, resp.serviceData) 
} 
+0

danke, das macht aber Sinn, jetzt bin ich fest auf "alle goroutines sind schlafend-Deadlock". Ich habe versucht, Waitgroups hinzuzufügen und den Kanal zu schließen, aber nicht weit zu kommen. Irgendwelche Vorschläge? – shishh03

Verwandte Themen