Golang 프로그램의 WaitGroup 및 채널 사용
이 Golang 프로그램은 sync.WaitGroup 및 채널을 활용하여 효율적인 고루틴 실행 및 데이터 수집을 달성합니다. 하지만 작업을 완료한 후에도 프로그램이 종료되지 않는 문제가 발생합니다. 이 기사에서는 문제를 자세히 조사하고 해결책을 제공합니다.
이 프로그램에는 기호 목록에 대한 주식 시세를 검색한 다음 결과를 파일에 저장하는 작업이 포함됩니다. 이는 고루틴과 채널의 조합을 사용하여 가져오기 프로세스를 동시에 실행하고 WaitGroup을 사용하여 모든 작업의 완료를 추적합니다. 그러나 fetchedSymbols 채널이 무기한 열려 있기 때문에 프로그램은 무한 루프에 빠지게 됩니다.
이 문제를 해결하려면 프로그램은 모든 고루틴이 작업을 마친 후 fetchedSymbols 채널을 닫아야 합니다. 이미 고루틴 완료를 추적하는 WaitGroup을 이 목적으로 활용할 수 있습니다. WaitGroup이 0에 도달할 때 채널을 닫는 go func() 래퍼를 추가하면 문제가 해결됩니다.
수정된 코드 섹션은 다음과 같습니다.
<code class="go">... go func() { wg.Wait() close(fetchedSymbols) }() for response := range fetchedSymbols { fmt.Println("fetched " + response) } ...</code>
추가된 go func() 루틴은 WaitGroup이 0에 도달할 때까지 기다립니다. 이는 모든 고루틴이 작업을 완료했음을 나타냅니다. 그런 다음 fetchedSymbols 채널을 닫아 메인의 범위 루프가 예상대로 종료되고 프로그램이 실행을 완료할 수 있도록 허용합니다.
이 개선된 프로그램은 동시 고루틴 실행 및 데이터 검색을 위해 WaitGroup 및 채널을 효과적으로 활용하고 종료됩니다. 필요한 모든 작업을 성공적으로 완료한 후.
위 내용은 **WaitGroup 및 채널을 사용하는 Golang 프로그램이 무기한 실행되는 이유는 무엇입니까?**의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!