🐾   [golang] 채널(channel) blocking 해결 방법

이전꺼 글 넣기 2022.10.06 - [Study/Go 언어] - [golang] 채널(channel)에서 주의할 점

해결 방법

close를 해주면 된다. 값이 빠져나간 곳에 데이터 타입의 기본값이 들어간다. 예를 들어서 int는 0, string은 ““이 들어간다.

ch := make(chan int, 3)
ch <- 1
ch <- 2
ch <- 3
close(ch)

<-ch
<-ch
<-ch

result := <-ch //0이 빼와서 에러가 나지 않고 종료 된다
fmt.Println("result :", result) // 0이 출력된다

fmt.Println("finish")

예를 들어 보면 1, 2, 3 값이 다 들어가서 채널이 꽉 찼다. 그러고 나서 close를 했다.

1이 빠져 나가면 0을 채워준다.

image 2,3 도 빠져 나가면 채널에는 0이 찬다. 그래서 4번째에 값을 불러도 에러 나가 나지 않고 종료가 된다.

image

주의 사항

close를 하면 send 할 수 없다.

ch <- 5

close한 채널에 값을 넣으면 에러가 난다.

panic: send on closed channel

참조

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

​ ​ ​