Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- package
- bitcoin
- windows
- API
- window
- mutex
- Sync
- range
- write
- File
- Python
- json
- c++
- go언어
- Close
- GO 언어
- 책
- Callback
- go
- C
- Linux
- Golang
- channel
- 리뷰
- JavaScript
- http
- 영화
- FOR
- install
- tcp
Archives
- Today
- Total
Code Habit
Go ) channel 본문
채널은 고루틴끼리 데이터를 주고받고, 실행 흐름을 제어하는 기능이다. 모든 타입은 채널로 사용할 수 있다. 그리고 채널 자체는 값이 아닌 레퍼런스 타입이다.
채널은 다음과 같이 공간을 할당 후 사용해야 한다. 이렇게 생성하면 동기 채널( 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(1, 2, c) // sum을 고루틴으로 실행한 뒤 채널을 매개변수로 넘겨줌
n := <-c // 채널에 값이 들어올 때까지 대기
fmt.Println(n) // 3
}
|
채널을 매개변수로 받는 함수는 반드시 go 키워드를 사용하여 고루틴으로 실행해야 한다.
동기 채널은 보내는 쪽에서는 값을 받을 때까지 대기하고, 받는 쪽에서는 채널에 값이 들어올 때까지 대기한다.