Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Code Habit

Go ) channel 본문

카테고리 없음

Go ) channel

코드베어 2020. 6. 9. 08:40

채널은 고루틴끼리 데이터를 주고받고, 실행 흐름을 제어하는 기능이다. 모든 타입은 채널로 사용할 수 있다. 그리고 채널 자체는 값이 아닌 레퍼런스 타입이다.

 

채널은 다음과 같이 공간을 할당 후 사용해야 한다. 이렇게 생성하면 동기 채널( synchronous channel )이 생성된다.

  •  make(chan 자료형)

채널은 다음과 같이 사용한다.

  •  채널 <- : 채널에 값을 보낸다.
  • <- 채널 : 채널에 값이 들어올 때가지 기다린 뒤 값이 들어오면 값을 가져오고 다음 코드를 실행한다.

고루틴과 채널을 사용하여 두 정수 값을 더해보겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
 
func sum(a int, b int, c chan int) {
    c <- a + b // 채널에 a와 b의 합을 보냄
 
func main() {
    c := make(chan int// int형 채널 생성
    
    go sum(12, c)        // sum을 고루틴으로 실행한 뒤 채널을 매개변수로 넘겨줌
 
    n := <-c             // 채널에 값이 들어올 때까지 대기
    fmt.Println(n)        // 3
}

채널을 매개변수로 받는 함수는 반드시 go 키워드를 사용하여 고루틴으로 실행해야 한다.

동기 채널은 보내는 쪽에서는 값을 받을 때까지 대기하고, 받는 쪽에서는 채널에 값이 들어올 때까지 대기한다.