GO언어 - Channel
채널(Channel) 이란?
Go 언어에서 채널은 고루틴을 연결해주는 통로(파이프)이다.
기본적으로 채널은 양방향이고 고루틴이 아래 이미지와 같이 동일한 채널을 통해 데이터를 보내거나 받을 수 있다.
채널 생성
채널은 chan 키워드를 사용하여 만들수 있고 동일한 유형의 데이터만 전송할 수 있는데, make() 함수를 사용하여 채널을 만들 수 있다.
channel_name := make(chan Type)
채널 송수신
<- 연산자의 방향은 데이터 수신 또는 송신 여부를 나타낸다.
[데이터 송신]
myChannel <- data
[데이터 수신]
data := <-myChannel
아니면 이렇게 표현 가능하다.
<-myChannel
이처럼 수신될 변수가 없어도 유효하다.
채널 닫기
close() 함수를 사용하여 채널을 닫을 수 있다. 채널을 닫으면, 해당 채널로는 더 이상 송신을 할 수 없지만 채널에 데이터가 있으면 수신은 가능하다.
close(myChannel)
이 형태를 이용하면 채널이 열려 있는지 닫혀 있는지 확인할 수 있다.
data, ok := <-myChannel
여기서 ok값이 ture이면 채널이 열려있다는 의미이고 false면 닫혀 있다는 의미이다.
또한, for range 문을 사용하여 채널이 닫힐 때까지 데이터를 수신할 수 있다.
for item := range myChannel {
...
}
채널이 열려 있다면 range는 채널에 값이 들어올 때까지 대기를 하게 되고, 채널이 닫히면 range 루프가 종료된다.
지금까지 배운 내용을 활용해보자.
package main
import "fmt"
func main() {
// 채널 생성
myChannel := make(chan string)
go func() {
// 값 전달
myChannel <- "Wellcome"
myChannel <- "user"
// 채널 닫음
close(myChannel)
} ()
// 값 수신
for msg := range myChannel {
fmt.Println(msg)
}
}
출력:
Wellcome
user
채널은 기본적으로 양방향 채널이지만 단방향 채널로도 사용할 수 있다.
Comments