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를 통해 입력이 없는동안의 동작을 쉽게 구현할 수 있다.
참조
반응형
'golang' 카테고리의 다른 글
golang gin API + swagger 적용하기 (0) | 2022.11.15 |
---|---|
Go gin middleware 적용하기 (0) | 2022.11.14 |
API server를 위한 go Gin 설치하고 사용하기 (예제) (0) | 2022.04.14 |
[golang] defer, panic, recover (0) | 2022.02.28 |
[golang] 구조체 , 메소드 예제 (map 초기화) (0) | 2022.02.25 |