9~15 줄을 보자. message 채널에서 메시지를 기다리고 있다. 원래대로라면 메시지를 기다리면서 블럭돼야 겠지만, default 문이 수행된다.
19~14 줄에서 message 채널에 메시지를 보내고 있다. 채널을 기다리는 대상이 없기 때문에 default문이 수행된다. default 문을 삭제하고 코드를 실행하면 fatal error: all goroutines are asleep - deadlock! 에러 메시지를 출력하면서 실행 실패한다. 메시지 채널을 기다리는 고루틴이 없어서 영원히 블럭되기 때문이다.
26 ~ 33 줄에서 처럼 두 개 이상의 채널을 비 봉쇄로 읽을 수 있다.
다음 예제 : Closing Channels
예제로 살펴보는 Go : Non-Blocking 채널 사용
package main import "fmt" func main() { message := make(chan string) signals := make(chan bool) select { case msg := <-message: fmt.Println("Received message ", msg) default: fmt.Println("no message received") } msg:="hi" select { case message <- msg: fmt.Println("Send message ", msg) default: fmt.Println("no message sent") } select { case msg := <-message: fmt.Println("Receivced message ", msg) case sig := <-signals: fmt.Println("received signal", sig) default: fmt.Println("no activity") } }Recent Posts
Archive Posts
Tags