티스토리 뷰

고루틴을 사용하다가 서로 다른 고루틴에 데이터를 전달하여야 하는 경우가 있을겁니다.

이러한 경우에 사용하는것이 Channel입니다.

채널은 동시에 실행되는 고루틴들을 연결해주는 일종의 파이프라고 하네요.

 

1. 채널의 생성

chan 키워드를 이용하여 생성이 가능합니다.

channel1 chan int

2. 사용

이렇게 쓰면 됩니다.

func test1(cha chan string) {
    cha <- "test"
}

func test2(cha chan string) {
    fmt.Println(<- cha) // test가 출력됨
}

func main() {
    cha := make(chan string)
    
    go test1(cha)
    go test2(cha)
}

간단하죠?

 

3. 단방향으로만 사용하고 싶을때

read, write only를 사용할수 있습니다.

func test1(cha <- chan string) {
    // write only
    cha <- "test"
}

func test2(<- cha chan string) {
    // read only
    fmt.Println(<- cha) // test가 출력됨
}

func main() {
    cha := make(chan string)
    
    go test1(cha)
    go test2(cha)
}

<- 를 잘 이용합니다.

 

4. 특정 채널의 값을 가지고 컨트롤

func waitFromChannel(<- cha1 chan int, <- cha2 chan int) {
    switch {
    case <- cha1:
        fmt.Println("channel1")
    case value := cha2:
        fmt.Println("channel2", value)
    }
}

switch를 사용 하면 됩니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/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
글 보관함