2017-05-06 6 views
-1

나는 goroutine가 for 루프에서 실행이 :"잠 들어있는"고 루틴을 모두 닫으려면 어떻게해야합니까?

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


      } 

나는 것을 실행, 모든 goroutines이 잠 말한다. 어떤 제안?

+0

당신은 실제 코드를 표시해야합니다. – Volker

+0

위 링크에서 샘플 코드를 사용하면 시작할 수 있다고 생각합니다. 이 코드를 실행하면 동일한 출력을 인쇄하는 것을 볼 수 있습니다. 내가 원하는 것은 ID를 통해 반복하고 모두 인쇄합니다. – shishh03

+1

이 코드를 디버깅 할 시간이 없지만 전체 문서를 읽는 것이 좋습니다. https://github.com/golang/go/wiki/ CommonMistakes # goroutines-on-loop-iterator-variables –

답변

2

3 개의 골 루틴 (go serviceReq(i, httpCh))에 채널을 전달하기 시작했습니다. 그런 다음 해당 채널에서 번만 (ch := (<-httpCh).serviceData) 번만 수신됩니다. 대신 루프에서 받아야 그

:

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

고마워요,하지만 지금은 "모든 goroutines은 잠들고 교착 상태"에 머물러 있습니다. 대기 그룹을 추가하고 채널을 닫으려고했지만 멀지는 않았습니다. 어떤 제안? – shishh03