드디어 고를 사용하는 궁극적인 목표인 고루틴을 배우네요.

사용법은 매우 간단합니다.

 

먼저, 별거 아니지만 10번 반복하는 루프문에 초마다 쉬는 코드를 넣어줍니다.

package main

import (
	"fmt"
	"time"
)

func main() {

	sexyCount("Hyunwoo")
	sexyCount("Jihun")
}

func sexyCount(name string) {
	for i := 0; i < 10; i++ {
		fmt.Println(name, " is sexy ", i)
		time.Sleep(time.Second)
	}
}

 

 

이렇게 되면 메인에서 두번 실행해도 Hyunwoo가 10번 10초간 재생된 후 Jihun이 10번 재생하여 총 프로그램 끝나는 시간이 20초나 걸리게 되겠죠?

 

하지만 Go에서는 두가지의일을 한번에 처리할 수 있습니다.

이런식으로요.

 

package main

import (
	"fmt"
	"time"
)

func main() {

	go sexyCount("Hyunwoo")
	sexyCount("Jihun")
}

func sexyCount(name string) {
	for i := 0; i < 10; i++ {
		fmt.Println(name, " is sexy ", i)
		time.Sleep(time.Second)
	}
}

 

사용법은 아주 간단합니다.

같이 재생하려고 하는 함수 앞에 go를 붙여주기만 하면 됩니다.

이렇게 되면 Hyunwoo는 Jihun이랑 같은줄에 있는것으로 인식되고, 같이 재생됩니다.

 

다만 고루틴에는 지켜야할 약속이 있는데요.

바로 프로그램이 끝나는 동시 고루틴이 끝나던 안끝나던 무조건 종료시키는 겁니다.

고로 프로그램이 돌고있지 않다면 고루틴또한 돌지 않는다는 것이겠죠?

 

만약,

go sexyCount("Hyunwoo")
go sexyCount("Jihun")

 

이런식으로 메인에 메인 함수 실행이 없이, 고루틴만 두개가 덩그러니 있다면,

메인에선 실행할 메인 함수가 없어 프로그램이 종료가 됩니다.

 

왜냐? 고루틴은 앞서 말씀드렸듯 혼자 무언갈 할 수 없습니다. 누군가 일을 하고있을때 일을 하나 더 겸하는 느낌이죠. 부업!

+ Recent posts