네 칸 모두 초록 줄이 나갈 길을 하나 더 낸다 누수 네 가지 · 모두 나가는 길이 없다 블록 지점은 다르고, 고칠 때는 나갈 길을 하나 더 낸다 1수신자 없는 송신go func() { ch <- v }()✓ 버퍼 1, 또는 select에 ctx.Done() 2닫히지 않는 채널을 rangefor v := range ch { … }✓ 보내는 쪽이 defer close(ch) 3취소를 모르는 selectselect { case v := <-ch: … }✓ case <-ctx.Done(): return 추가 4Add와 Done 개수가 다르다wg.Add(2) … Done() 한 번✓ 고루틴 첫 줄에 defer wg.Done() Go · 개념 정리Go 고루틴 누수와 pprof채널·뮤텍스, 그리고 종료 경로고루틴을 만들기는 쉽다. 어려운 건 누가 데이터를 바꾸고, 누가 일을 끝내고, 언제 함수가 반환해도 되는지 정하는 일이었다. 채널을 잘못 쓰면 고루틴이 영원히 갇히는데, GC는 갇힌 고루틴을 치워 주지 않는다.2026.10.06