Go Timer & Ticker 사용법: 주기적 작업 처리
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

定时 작업을 위한 Go의 Timer와 Ticker 사용

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

Go로 주기적 작업이나 지연 실행이 필요한 소프트웨어 개발자, 중간 수준 이상의 Go 사용자

핵심 요약

  • time.Timer한 번만 실행하는 일회성 타이머, time.Ticker주기적으로 실행하는 타이머로, NewTimer, AfterFunc, NewTicker 함수로 생성
  • Reset(d Duration) bool은 타이머의 기간을 재설정하고, Stop() bool은 타이머 중지
  • ticker.C 채널은 주기적으로 현재 시간을 전달하며, context와 함께 사용하여 리소스 누수 방지 가능
  • AfterFunc는 콜백 함수를 직접 실행하고, NewTimer는 채널을 통해 이벤트 전달

섹션별 세부 요약

1. Timer 생성 및 기본 사용법

  • NewTimer(d Duration)은 지정한 시간 후 채널 C에 시간을 전달
  • AfterFunc(d Duration, f func())은 타이머 종료 시 콜백 함수 f를 직접 실행
  • AfterFuncStop()을 통해 실행 취소 가능, NewTimer는 채널을 통해 이벤트 처리

2. Reset 메서드 동작

  • Reset(d Duration) bool은 타이머가 활성 상태일 경우 true 반환, 종료/중지 상태일 경우 false
  • 예: timer.Reset(1s)는 1초 후에만 실행, 기존 5초 타이머를 재설정 시 false 반환

3. Stop 메서드 동작

  • Stop() bool은 타이머가 중지 상태일 경우 false 반환
  • 채널 C은 중지 후에도 닫히지 않으므로, context와 함께 사용하여 루프 종료 조건 설정 필요

4. Ticker의 주기적 실행

  • NewTicker(d Duration)은 지정한 간격마다 ticker.C에 현재 시간 전달
  • for range ticker.C로 이벤트 수신 가능, context와 함께 사용하여 리소스 누수 방지

5. Ticker의 Reset 및 Stop

  • Reset(d Duration)은 Ticker의 간격 재설정, Stop()은 Ticker 중지
  • ticker.C는 중지 후에도 닫히지 않으므로, contextquit 채널로 루프 종료 조건 설정 필요

결론

  • ticker.Ccontext를 함께 사용하여 리소스 누수 방지, 타이머 중지 시 채널 닫기 필요 없음
  • AfterFunc는 간단한 콜백 처리에 적합, NewTimer는 채널 기반 이벤트 처리에 적합
  • ResetStop 메서드의 반환값을 통해 타이머 상태를 정확히 확인하여 예기치 않은 동작 방지
  • 주기적 작업은 ticker.Cfor range 또는 select 구문을 사용하여 처리하며, context를 통해 종료 조건 설정 필수