괴발개발 성장기

Study/Go 언어

[golang] 고루틴이 끝나기 전에 main이 끝나는 문제 해결 방법

지니유 2022. 10. 10. 15:41
반응형

 

 

 

# 배경

고루틴이 끝나지도 않았는데 main 함수가 종료가 된다.

 

# 해결방법

main은 고루틴이 끝났는지 알 수 없다. 그래서 WaitGroup 사용해야한다.

 

# 예시

func Add() {
    sum := 1 + 2
    fmt.Printf("합계 : %d \n", sum)
}
func GoroutineSolution() {

   fmt.Println("Goroutine 시작")

   var wg sync.WaitGroup
   wg.Add(1)
   go func() {
      Add()
      wg.Done()
   }()
   wg.Wait()

   fmt.Println("Goroutine 끝")
}

wg.Add(1) 해서 wg가 1이라고 생각하자. 고루틴이 다 끝나면 wg.Done()를 한다. 이건 -1이라고 생각하면 된다.
wg.Wait() 는 0이 될 때까지 기다리고 있다. 즉 0이 되면 고루틴이 끝난 것이다. 그 후 다음 코드를 실행 시킨다.

 

# 참조

https://github.com/YooGenie/go-study/issues/54

 

고루틴이 끝나기 전에 main이 끝나는 문제 해결 방법 · Issue #54 · YooGenie/go-study

 

github.com

 

 

반응형