본문 바로가기

golang

[golang] go routine과 chan 이용한 메세지 입력

golang의 가장 강력한 무기는 go routine을 이용한 효율적인 비동기 프로세스로 볼 수 있는데, 이를 잘 활용하기 위해 chan을 활용한다.
(chan 역시 go의 아주 큰 장점이다)

아래 예제는 사용자의 입력을 10초동안 기다리면서 1초에 한번 알람을 출력하다가, 입력값이 들어오면 프로그램을 종료하는 내용이다.

package main

import (
	"fmt"
	"time"
)

func main() {

	ch := make(chan string)

	go sendMessage(ch)

	remainSec := 10

	for remainSec > 0 {
		select {
		case tmp := <-ch:
			fmt.Println(tmp + " 메시지가 발송되었습니다.")
			return
		default:
			fmt.Printf("%d 초 안에 메시지를 입력하시오.\n", remainSec)
			remainSec -= 1
			time.Sleep(1000 * time.Millisecond)
		}
	}
}

func sendMessage(ch chan string) {
	var tmp string
	fmt.Scanln(&tmp)

	ch <- tmp
}

select 문을 활용해서 chan 의 입력을 효과적으로 기다릴 수 있으며 default를 통해 입력이 없는동안의 동작을 쉽게 구현할 수 있다.

 

 

참조

https://edu.goorm.io/learn/lecture/2010/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-%EA%B3%A0%EB%9E%AD-%EA%B8%B0%EC%B4%88/lesson/382961/%EC%B1%84%EB%84%90-select%EB%AC%B8

반응형