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