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 |
Tags
- range
- bitcoin
- 리뷰
- write
- Callback
- Linux
- go
- C
- json
- 영화
- install
- API
- Close
- package
- JavaScript
- FOR
- http
- Golang
- GO 언어
- tcp
- c++
- channel
- go언어
- windows
- Sync
- 책
- window
- File
- Python
- mutex
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 키워드를 사용하여 고루틴으로 실행해야 한다.
동기 채널은 보내는 쪽에서는 값을 받을 때까지 대기하고, 받는 쪽에서는 채널에 값이 들어올 때까지 대기한다.