반응형
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을 채워준다.
2,3 도 빠져 나가면 채널에는 0이 찬다. 그래서 4번째에 값을 불러도 에러 나가 나지 않고 종료가 된다.
# 주의 사항
close를 하면 send 할 수 없다.
ch <- 5
close한 채널에 값을 넣으면 에러가 난다.
panic: send on closed channel
# 참조
https://github.com/YooGenie/go-study/issues/44
반응형
'Study > Go 언어' 카테고리의 다른 글
[golang] 고루틴이 끝나기 전에 main이 끝나는 문제 해결 방법 (0) | 2022.10.10 |
---|---|
[golang] 고루틴(goroutine) 기본 문법 (0) | 2022.10.09 |
[golang] 채널(channel)에서 주의할 점 (0) | 2022.10.06 |
[golang] 채널(channel) 기본 문법 (0) | 2022.10.05 |
[Golang] XORM에서 this is incompatible with DISTINCT 에러 메시지 발생 (0) | 2022.09.23 |