저번시간에 배웠듯 Go는 너무나 똑똑해서 여러가지의 일을 동시에 진행할 수 있습니다.
아래 예시 코드입니다.
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan bool) //채널을 만드는데 리턴받을 값 타입을 정해줘야 한다.
people := [2]string{"nico", "hyunwoo"}
for _, person := range people {
//여기서 isSexy 함수는 bool을 return하는데, 이걸
//result := go isSexy(person) 형태로 받을 수 없다. 고루틴에서는 Channel을 사용해야 한다.
go isSexy(person, c)
}
//채널에서 값이 올때까지 메인에서 기다리기 때문에 따로 해주는게 없어도 프로그램이 끝나지않고 기다린다.
fmt.Println(<-c)
}
//채널을 파라미터로 받는다 chan (타입)
func isSexy(person string, c chan bool) {
time.Sleep(time.Second * 5)
//return true 이 방법으론 고루틴이 끝날 때 데이터를 보낼 수 없으므로, 밑의 채널방법을 쓴다.
c <- true
}
또한 너무도 똑똑해서 채널을 여러개 받도록 해놓아도, 정해진 갯수 만큼의 채널을 받으면 프로그램을 종료시켜 버립니다.
여기서 채널이란?
고루틴은 일반 함수같이 return값을 정의한다고 리턴을 평범하게 받을 수 있는게 아니라
채널이라는 새로운 고 타입의 변수를 만들어주어야 받을 수 있습니다.
또한 이전시간에 고루틴을 실행하려면 메인펑션에서 하나의 함수나 기능은 돌고있어야 실행이 된다고 말씀 드렸는데요, 채널을 이용하면 돌고있을 필요없이 프로그램에서 펑션을 실행할때 채널을 리턴하도록 되어있다면, 프로그램이 돌 수 있게 됩니다.
그럼 여러개의 고루틴이 차례로 도는데 이 아이들은 알아서 따로 알고 지들 멋대로 잘 하나요? 하는
궁금증이 생겨서 똑같은 루틴을 두번 실행하고 채널을 출력 해봤습니다.
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan string) //채널을 만드는데 리턴받을 값 타입을 정해줘야 한다.
people := [2]string{"nico", "hyunwoo"}
for _, person := range people {
//여기서 isSexy 함수는 bool을 return하는데, 이걸
//result := go isSexy(person) 형태로 받을 수 없다. 고루틴에서는 Channel을 사용해야 한다.
go isSexy(person, c)
}
//채널에서 값이 올때까지 메인에서 기다리기 때문에 따로 해주는게 없어도 프로그램이 끝나지않고 기다린다.
fmt.Println("first msg", <-c)
fmt.Println("second msg", <-c)
for _, person := range people {
//여기서 isSexy 함수는 bool을 return하는데, 이걸
//result := go isSexy(person) 형태로 받을 수 없다. 고루틴에서는 Channel을 사용해야 한다.
go isSexy(person, c)
}
fmt.Println("third msg", <-c)
fmt.Println("forth msg", <-c)
}
//채널을 파라미터로 받는다 chan (타입)
func isSexy(person string, c chan string) {
time.Sleep(time.Second * 5)
//return true 이 방법으론 고루틴이 끝날 때 데이터를 보낼 수 없으므로, 밑의 채널방법을 쓴다.
c <- person + " is sexy"
}
역시나 알아서 잘 되더군요..
똑똑해 고!
'GO' 카테고리의 다른 글
노마드와 함께하는 고 Study -6 (페이지에서 데이터 뽑아오기) (0) | 2020.04.02 |
---|---|
노마드와 함께하는 고 Study -5 Goroutine #3 (URL 체커에 도입) (0) | 2020.03.24 |
노마드와 함께하는 고 Study -5 Goroutine (0) | 2020.03.24 |
노마드와 함께하는 고 Study -4 URL 체커 (0) | 2020.03.23 |
노마드와 함께하는 고 Study -3 메소드 (0) | 2020.03.23 |