Sleep과 Ticker
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 64번째.
때때로 프로그램의 실행 타이밍을 제어해야 할 때가 있습니다. Go는 이를 위해 time 패키지에서 두 가지 필수 함수를 제공합니다: 실행을 일시 중지하는 time.Sleep과 정기적인 간격으로 작업을 수행하는 time.NewTicker입니다.
time.Sleep 함수는 지정된 시간 동안 프로그램을 일시 중지합니다. 이 함수는 time.Duration을 매개변수로 받으며, 해당 시간이 지날 때까지 실행을 차단합니다:
fmt.Println("Starting...")
time.Sleep(2 * time.Second)
fmt.Println("Two seconds have passed!")정기적인 간격으로 반복되는 작업을 위해, time.NewTicker는 지정된 간격으로 채널에 값을 보내는 티커(ticker)를 생성합니다. 이는 주기적으로 실행되어야 하는 작업에 유용합니다:
ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
<-ticker.C // 다음 틱을 기다립니다
fmt.Println("Tick", i+1)
}이러한 타이밍 함수들은 Go 프로그램에서 지연을 생성하고, 타임아웃을 구현하며, 반복적인 작업을 예약하는 데 필수적입니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움time.Sleep을 사용하여 가이드 안내 사이에 일시 정지를 만들고 Go 프로그램의 기본적인 타이밍 제어를 보여주는 명상 세션 타이머를 만드세요.
두 개의 입력을 받게 됩니다:
"step1:duration,step2:duration,step3:duration"형식의 명상 단계가 포함된 문자열 (예:"Breathe in:3,Hold:2,Breathe out:4")- 반복할 사이클 횟수가 포함된 문자열 (예:
"5")
여러분의 과제는 다음과 같습니다:
- 첫 번째 입력을 쉼표로 분리하여 개별 명상 단계를 파싱합니다.
- 각 단계에 대해 콜론을 기준으로 분리하여 지침(instruction)과 지속 시간(초 단위)을 추출합니다.
strconv패키지를 사용하여 지속 시간 문자열을 정수로 변환합니다.- 두 번째 입력을 정수로 변환하여 사이클 횟수를 구합니다.
- 세션 헤더를 출력합니다:
"=== MEDITATION TIMER ===" - 세션 설정을 출력합니다:
"Starting meditation session with [number_of_cycles] cycles" - 각 사이클에 대해 (사이클 1부터 시작):
- 출력:
"--- Cycle [cycle_number] ---" - 각 명상 단계에 대해:
- 출력:
"[instruction]..." time.Sleep을 사용하여 지정된 지속 시간 동안 일시 정지합니다 (초 단위를time.Second와 곱하여time.Duration으로 변환합니다).- 일시 정지 후 출력:
"[instruction] complete ([duration] seconds)"
- 출력:
- 사이클의 모든 단계를 완료한 후 출력:
"Cycle [cycle_number] finished"
- 출력:
- 모든 사이클이 완료된 후 세션 요약을 출력합니다:
"=== SESSION COMPLETE ===""Total cycles completed: [number_of_cycles]""Steps per cycle: [number_of_steps]""Total meditation time: [total_seconds] seconds"(모든 단계 지속 시간의 합계에 사이클 횟수를 곱한 값)
- 완료 메시지를 출력합니다:
"Meditation session finished - well done!"
일시 정지 작업에는 time 패키지를, 입력 문자열 분리에는 strings 패키지를, 문자열을 정수로 변환하는 데는 strconv 패키지를, 그리고 출력에는 fmt 패키지를 사용하세요. time.Sleep은 time.Duration 매개변수를 받으므로, 적절한 기간 값을 생성하려면 정수 초에 time.Second를 곱해야 함을 기억하세요. 이 챌린지는 가이드 명상이나 운동 타이머와 같은 실제 애플리케이션을 위해 time.Sleep을 사용하여 프로그램 실행 중에 시간 지연을 만드는 방법을 보여줍니다.
치트 시트
time.Sleep을 사용하여 지정된 시간 동안 프로그램 실행을 일시 중지합니다:
time.Sleep(2 * time.Second)time.NewTicker를 사용하여 정기적인 간격으로 작업을 수행합니다:
ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
<-ticker.C // 다음 틱을 기다립니다
fmt.Println("Tick", i+1)
}두 함수 모두 time.Duration 값을 사용합니다. 정수를 time.Second와 곱하여 기간(duration)으로 변환하세요.
직접 해보기
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
"time"
)
func main() {
// 공백을 올바르게 처리하기 위해 bufio.Scanner를 사용하여 입력을 읽습니다.
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
stepsInput := scanner.Text()
scanner.Scan()
cyclesInput := scanner.Text()
// 명상 단계와 반복 횟수를 파싱합니다.
steps := strings.Split(stepsInput, ",")
cycles, _ := strconv.Atoi(cyclesInput)
// TODO: 아래에 코드를 작성하세요.
// 각 단계를 파싱하여 지침과 지속 시간을 추출합니다.
// 접근하기 전에 parts 슬라이스에 충분한 요소가 있는지 확인해야 합니다.
// 세션 헤더 및 설정을 표시합니다.
// 반복 횟수와 단계별로 루프를 실행합니다.
// 일시 정지를 위해 time.Sleep을 사용합니다 (테스트를 위해 밀리초 단위를 고려하세요).
// 완료 메시지 및 요약을 표시합니다.
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.