토익스피킹 공부한다고 한창 할 때... 생각나서 만들어본 타이머...
토익스피킹 처럼 준비시간/답변시간을 입력하면 카운트를 보여준다
beep음을 추가하면 더 좋았을 것 같지만 이미 더 좋은 타이머들이 많고
카운트 되는 숫자가 타이머와 일치하지 않은 버그도 있어서
한 번 타이머를 써본 것에 의의를 둔 기억이..
먼저 main함수를 보면 준비시간과 답변시간을 입력 받아 순차적으로 timer를 동작시킨다.
이때 timer를 카운트 하기 위해 TimerTick이란 함수를 사용하였다.
func main() {
pTime := os.Args[1]
sTime := os.Args[2]
pt, _ := strconv.Atoi(pTime)
st, _ := strconv.Atoi(sTime)
pTimer = time.NewTimer(time.Second * time.Duration(pt))
pState := 0
log.Println("Prepare Time Start")
go TimerTick(pt)
for {
select {
case <-pTimer.C:
log.Println("PreTime END")
pState = 1
}
if pState == 1 {
break
}
}
aTimer = time.NewTimer(time.Second * time.Duration(st))
aState := 0
log.Println("Answer Time Start")
go TimerTick(st)
for {
select {
case <-aTimer.C:
log.Println("AnswerTime END")
aState = 1
}
if aState == 1 {
break
}
}
}
1초마다 Cnt수를 콘솔에 출력하기 위해 만들었다.
(지금보니 리턴은 왜 한지 모르겠지만...)
고루틴으로 실행하였기에 실제 준비시간 또는 답변시간의 타이머의 시작 시간과 차이가 있어 정확히 시간이 카운트 되지 않는 버그가 있지만.....
실제 시험에서는 긴장을 하고, 어떤 변수가 있을 지 모르기에
카운트가 조금 짧게 느껴지도록 연습하면 되지 않을까 위안을 삼았던 기억이 있다...ㅎ
func TimerTick(cnt int) bool {
ticker := time.NewTicker(time.Second)
for {
select {
case <-ticker.C:
if cnt == 0 {
break
}
log.Println("CNT : ", cnt)
cnt--
}
}
return true
}
아무튼 timerTick함수로 카운트를 출력하는 것을 제외하고는 정해진 시간만큼 대기하는 기능은 잘 동작하는 것 같았다
실행 결과
끝!
'지식저장소 > Golang' 카테고리의 다른 글
[Golang] Ping 테스트 (0) | 2023.07.25 |
---|---|
[Golang] File Compare - 파일 비교 (0) | 2023.03.23 |
[Golang] AES - CFB - Base64 암호화 (0) | 2021.10.22 |
[Golang] Byte Slice를 hex로 보기 쉽게 출력하기 (0) | 2020.11.10 |
[Golang] AES - CBC - pkcs7Pad 암호화 (0) | 2020.11.02 |