괴발개발 성장기

Study/Go 언어

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

지니유 2022. 10. 7. 06:00
반응형

 

 

 

2022.10.06 - [Study/Go 언어] - [golang] 채널(channel)에서 주의할 점

 

[golang] 채널(channel)에서 주의할 점

2022.10.05 - [Study/Go 언어] - [golang] 채널(channel) 기본 문법 [golang] 채널(channel) 기본 문법 # 채널이란? 값을 전달하는 통로이다. 고루틴에서 고루틴으로 서로 값을 주고 받을 때 많이 사용한다. # 채..

pink1016.tistory.com

 

 

 

# 해결 방법

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

 

채널 blocking 해결 방법 · Issue #44 · YooGenie/go-study

 

github.com

 

 

 

반응형