Go 언어 select 대하여 배워보기

오늘은 Go 언어의 select에 대하여 작성하면서 배워보려 합니다.

package main

import (
	"time"
	"fmt"
)

func function(c chan int)  {
	time.Sleep(1)
	c <- 21
}

func main() {
	c :=make(chan int)
	go function(c)
	for {
		select {
			case value := <-c:
				fmt.Println(value)
				return
			default:
				fmt.Println("hello world")
			}
		}
}

고루틴 함수와 채널을 만들어서 계속 select문에서 신호를 받습니다.

hello world를 계속 출력하다가 고루틴 함수에서 sleep을 멈추고 신호를 보낼 때에 case에 채널이 걸려서 값이 출력되고 종료됩니다.

package main

import (
	"time"
	"fmt"
)

func test1(c chan int)  {
	c <- 21
}
func test2(c chan int)  {
	c <- 12
}

func main() {
	c1 := make(chan int)
	c2 := make(chan int)
	go test1(c1)
	go test2(c2)
	
	time.Sleep(1)
	select{
	case v1 := <- c1:
		fmt.Println(v1)
	case v2 := <- c2:
		fmt.Println(v2)
	}
}

두 채널과 고루틴 함수를 만들어서 select문에 넣으면, 두 채널 중 먼저 도달한 값이 랜덤으로 출력됩니다.

Written on September 23, 2018