まとめ:簡易タイマー
CoddyのGOジャーニー「論理とフロー」セクションの一部 — レッスン 65/68。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単time.NewTicker を使用して、指定された期間からゼロまでカウントダウンし、一定の間隔で進捗メッセージを表示するカウントダウンタイマーアプリケーションを作成します。このチャレンジでは、ティッカー、ループ、および期間の計算を組み合わせて、機能的なタイミングアプリケーションを作成する能力が試されます。
2つの入力を受け取ります:
"value:unit"形式のカウントダウン期間を含む文字列(例:"10:Second"や"3:Minute")"value:unit"形式の更新間隔を含む文字列(例:"1:Second")
あなたのタスクは以下の通りです:
- コロンで分割して最初の入力を解析し、カウントダウン期間の値と単位を抽出します
- コロンで分割して2番目の入力を解析し、更新間隔の値と単位を抽出します
strconvパッケージを使用して、文字列の値を整数に変換します- 適切な定数を使用して、カウントダウン期間と更新間隔の両方の
time.Durationオブジェクトを作成します:"Second"の場合:time.Secondを掛けます"Minute"の場合:time.Minuteを掛けます"Hour"の場合:time.Hourを掛けます
- タイマーヘッダーを表示します:
"=== COUNTDOWN TIMER ===" - タイマーの設定を表示します:
"Starting countdown from [countdown_duration_object]" - 更新頻度を表示します:
"Updates every [update_interval_object]" - 更新間隔の期間を使用して
time.NewTickerでティッカーを作成します - カウントダウン期間で残り時間変数を初期化します
- ループを使用してカウントダウンします:
<-ticker.Cを使用して各ティッカーイベントを待ちます- 残り時間から更新間隔を引きます
- 残り時間が0より大きい場合は、次を表示します:
"Time remaining: [remaining_time_object]" - 残り時間が0以下の場合は、
"Time's up!"を表示してループを抜けます
ticker.Stop()を使用してティッカーを停止します- 完了統計を表示します:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(残り時間が表示された回数を計算します)
- 完了メッセージを表示します:
"Countdown timer finished successfully"
ティッカーと期間の操作には time パッケージを、入力文字列の分割には strings パッケージを、文字列から整数への変換には strconv パッケージを、出力には fmt パッケージを使用してください。time.NewTicker は一定の間隔でチャネルに値を送信するティッカーを返し、リソースを解放するために終了時に ticker.Stop() を呼び出す必要があることに注意してください。このチャレンジは、Goのタイミングメカニズムを使用して実用的なカウントダウンタイマーを作成する方法を示しています。
自分で試してみよう
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// 入力を読み込む
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// カウントダウン期間の入力を解析する
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// 更新間隔の入力を解析する
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: 以下にコードを記述してください
// switch文を使用してtime.Durationオブジェクトに変換する
// カウントダウンタイマーを作成する(テスト用に実際の遅延なしでシミュレートする)
// カウントダウンループを実装する
// 必要なすべてのメッセージと統計を表示する
// 注意:テスト目的のため、実際の時間遅延なしでティッカーの動作をシミュレートしてください
}