- 본 글은 2023.09.03 에 작성된 포스트입니다
Channel
Channel 은 데이터를 주고 받을 수 있습니다. 주로 Goroutine 에서 스레드간 통신을 위한 매개체로 사용되기도 합니다. Go 에서 채널을 사용한다면 다음과 같은 키워드로 생성, 삭제, 읽기, 쓰기 작업을 수행할 수 있습니다.
make(chan {type}, {int})
: 채널을 생성- type : 채널에서 다룰 데이터 형식
- int: 버퍼의 개수, default 는 0이며, 버퍼의 개수만큼 지연없이 입력을 할 수 있습니다. 버퍼가 가득차면, 버퍼에서 출력할때까지 입력을 대기합니다.
<-
: 채널의 입/출력 연산자, 채널이 연산자의 왼쪽에 있으면 입력, 오른쪽에 있으면 출력close
: 채널 닫기range
: 채널이 닫히고 버퍼의 데이터가 다 소모될 때까지 루프를 돌 수 있습니다.select
: 복수의 채널을 실행, case 문으로 채널을 구분하고, 수신되는 채널이 없고 default 가 있다면 default 를 실행합니다.
예제를 통한 Channel 알아보기
다음은 하나의 버퍼를 가진 채널에 두 번씩 데이터를 보내지만, 버퍼가 가득차면 한번씩 채널을 실행하게 되는 예제를 보여줍니다.
world
world
Hello world
world
Hello world
world
Hello world
world
Hello world
Hello world
채널과 채널의 버퍼가 어떻게 쓰이는 지 알아보았는데, 다음은 range
도 어떻게 쓰이는 지 알아봅시다.
아래 예제에서는 고루틴을 Go 런타임에서 대기할 필요가 없어 WaitGroups
를 지정하지 않았습니다.
world
Hello world
world
Hello world
world
Hello world
world
Hello world
world
Hello world
마지막으로 select
의 예제를 살펴봅시다. select
는 앞에서 얘기했듯이 다중 채널을 다룰 수 있습니다.
I'm say
I'm say2
I'm say
I'm say
I'm say2
I'm say
I'm say
I'm say2
I'm say2
I'm say2
참고
select : https://hamait.tistory.com/1017
for : http://golang.site/go/article/8-Go-%EB%B0%98%EB%B3%B5%EB%AC%B8
channel : http://golang.site/go/article/22-Go-%EC%B1%84%EB%84%90
반응형
'DevOps > GoLang' 카테고리의 다른 글
[Golang] Goroutine (고루틴) (0) | 2023.09.03 |
---|