Golang Concurrency - Channel
2022. 8. 8. 22:04ㆍ개발/Golang
728x90
반응형
채널이란 ? 고루틴끼리 주고 받으려고 사용하는 통신 매커니즘
몇가지 규칙이 있습니다.
1. 각 채널마다 특정한 데이터타입으로만 데이터를 교환할 수 있음 그것을 원소타입이라고 불름
2. 채널이 정상적으로 작동하려면 채널로 데이터를 보내는 상대방이 있어야 함
3. 채널을 새로 선언하는 문장은 chan 키워드로 표시하고, 채널을 닫으려면 close() 함수를 호출한다.
4. 채널를 매개변수로 사용 할 때 반드시 채널의 방향, 보낼 채널인지.. 받을 채널인지 명시해야 한다.
1. 채널의 사용법
# 채널 생성
c := make(chan int)
# 채널 쓰기
c <- x
# 채널 읽기
x <- c
채널을 쓰려면 <- 표시에 따라 쓰기 읽기가 가능하다.
package main
import (
"fmt"
"time"
)
func writeToChannel(c chan int, x int) {
fmt.Println("1", x)
// 채널을 쓰기
c <- x
// 채널을 닫음
close(c)
fmt.Println("2", x)
}
func main() {
c := make(chan int)
go writeToChannel(c, 10)
time.Sleep(1 * time.Second)
fmt.Println("Read: ", <-c)
time.Sleep(1 * time.Second)
// 채널을 읽음
_, ok := <-c
if ok {
fmt.Println("channel is open!")
} else {
fmt.Println("channel is close")
}
}
< 결과 >
# go run main.go
1 10
Read: 10
2 10
channel is close
2. 채널 파라미터
# 채널 생성
c := make(chan int)
# 쓰기용 채널
func writech (c chan<-) {}
# 읽기용 채널
func readch (c <-chan) {}
채널을 쓰기용, 읽기용으로 사용이 가능하다. 만약에 타입에 맡게 지정후 사용하지않으면 에러가 발생한다.
728x90
반응형
'개발 > Golang' 카테고리의 다른 글
| Golang Concurrency - Gorutine (2) (0) | 2022.08.10 |
|---|---|
| Golang Concurrency - Gorutine (1) (0) | 2022.08.05 |
| 『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트 : 14강 포인터 (0) | 2021.05.30 |
| 『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트 : 13강 구조체 (0) | 2021.05.28 |
| 『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트 : 12강 배열 (0) | 2021.05.27 |