y0u_bat

[Go언어] 10. 채널 본문

프로그래밍/Go언어

[Go언어] 10. 채널

유뱃 2016. 1. 12. 17:42


채널

고루틴을 채널을 이용해서 데이터를 주고 받고 흐름제어도 가능함.


func sum(a int,b int,c chan int) {

c <- a+b

}


func main() {

c := make(chan int)


go sum(100,200,c)


a := <-c


fmt.Println(a)

}


결과: 300



채널 <-  값

- 해당채널에 해당값을 보낸다.

<-채널  

- 이거는 채널에서 값이 올때까지 대기한다.




동기채널


func test(c chan int) {

for i :=0; i<10; i++ {

c <- i

time.Sleep(1*time.Second)

fmt.Println("test",i)

}

}


func main() {

c := make(chan int)

for i :=0; i<10;i++ {

<-c 

fmt.Println("main",i)

}

}



채널버퍼 (비동기)


func main() {

c: make(chan bool,2)  // 버퍼가 2


go func() {

for i:=0; i<10; i++ {

c <-true

fmt.Println("go",i)

}

}()


for i:=0; i<10;i++ {

<-c

fmt.Println("main",i)

}

}




셀렉트


func f1(c chan int) {

for {

c <- 10

time.Sleep(1*time.Second)

}

}



func f2(c chan string) {

for {

c <- "test"

time.Sleep(2*time.Second)

}

}


func f3(c1 chan int, c2 chan string)

{

for {

select {

case a := <-c1

fmt.Println(a)

case b := <-c2

fmt.Println(b)

}


}

}


func main() {


a := make(chan int)

b := make(chan string)

go f1(a)

go f2(b)

go f3(a,b)


}




'프로그래밍 > Go언어' 카테고리의 다른 글

[Go언어] 9. 고루틴 (쓰레드?)  (0) 2016.01.11
[Go언어] 8. 인터페이스  (0) 2016.01.10
[Go언어] 7. 구조체  (0) 2016.01.08
[Go언어] 6. 포인터  (0) 2016.01.08
[Go언어] 5. 클로저,지연호출,패닉과 복구  (0) 2016.01.08
Comments