Rekap: Timer Sederhana
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 65 dari 68.
Tantangan
MudahBuat aplikasi timer hitung mundur yang menggunakan time.NewTicker untuk menghitung mundur dari durasi yang ditentukan hingga nol, sambil menampilkan pesan progres secara berkala. Tantangan ini akan menguji kemampuanmu menggabungkan ticker, perulangan, dan perhitungan durasi untuk membuat aplikasi pengatur waktu yang berfungsi.
Kamu akan menerima dua input:
- String yang berisi durasi hitung mundur dengan format
"value:unit"(misalnya,"10:Second"atau"3:Minute") - String yang berisi interval pembaruan dengan format
"value:unit"(misalnya,"1:Second")
Tugasmu adalah:
- Parse input pertama dengan memisahkannya pada tanda titik dua untuk mengambil nilai dan unit durasi hitung mundur
- Parse input kedua dengan memisahkannya pada tanda titik dua untuk mengambil nilai dan unit interval pembaruan
- Ubah nilai string menjadi bilangan bulat menggunakan package
strconv - Buat object
time.Durationuntuk durasi hitung mundur dan interval pembaruan menggunakan konstanta yang sesuai:- Untuk
"Second": kalikan dengantime.Second - Untuk
"Minute": kalikan dengantime.Minute - Untuk
"Hour": kalikan dengantime.Hour
- Untuk
- Tampilkan header timer:
"=== COUNTDOWN TIMER ===" - Tampilkan pengaturan timer:
"Starting countdown from [countdown_duration_object]" - Tampilkan frekuensi pembaruan:
"Updates every [update_interval_object]" - Buat ticker menggunakan
time.NewTickerdengan durasi interval pembaruan - Inisialisasi variabel waktu tersisa dengan durasi hitung mundur
- Gunakan perulangan untuk menghitung mundur:
- Tunggu setiap peristiwa ticker menggunakan
<-ticker.C - Kurangi waktu tersisa dengan interval pembaruan
- Jika waktu tersisa lebih besar dari 0, tampilkan:
"Time remaining: [remaining_time_object]" - Jika waktu tersisa 0 atau kurang, tampilkan:
"Time's up!"lalu keluar dari perulangan
- Tunggu setiap peristiwa ticker menggunakan
- Hentikan ticker menggunakan
ticker.Stop() - Tampilkan statistik penyelesaian:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(hitung berapa kali waktu tersisa ditampilkan)
- Tampilkan pesan penyelesaian:
"Countdown timer finished successfully"
Gunakan package time untuk operasi ticker dan durasi, package strings untuk memisahkan string input, package strconv untuk mengubah string menjadi bilangan bulat, dan package fmt untuk output. Ingat, time.NewTicker mengembalikan ticker yang mengirimkan nilai melalui channel-nya secara berkala, dan kamu harus memanggil ticker.Stop() setelah selesai untuk membebaskan resource. Tantangan ini menunjukkan cara membuat timer hitung mundur yang praktis menggunakan mekanisme pengatur waktu Go.
Coba sendiri
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Baca input
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Uraikan input durasi hitung mundur
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Uraikan input interval pembaruan
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Tulis kodemu di bawah ini
// Ubah menjadi object time.Duration menggunakan pernyataan switch
// Buat pengatur waktu hitung mundur (simulasikan tanpa jeda sungguhan untuk pengujian)
// Terapkan perulangan hitung mundur
// Tampilkan semua pesan dan statistik yang diperlukan
// Note: Untuk pengujian, simulasikan perilaku ticker tanpa jeda waktu sungguhan
}Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas7Penanganan Error secara Mendalam
Tipe Error KustomMembungkus Error dengan `%w`Membuka Bungkus Error dengan `errors.Is`Membuka Bungkus Error dengan `errors.As`Memahami `panic`Menggunakan `recover`Rangkuman: Pembagian Aman10Bekerja dengan Waktu
Mendapatkan Waktu Saat IniMembuat Waktu TertentuMemformat WaktuMengurai String WaktuDurasi WaktuAritmetika WaktuTidur dan TickerRekap: Timer Sederhana2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online