Özet - Basit Zamanlayıcı
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 65 / 68.
Görev
KolayBelirtilen bir süreden sıfıra kadar geri saymak ve düzenli aralıklarla ilerleme mesajları görüntülemek için time.NewTicker kullanan bir geri sayım sayacı uygulaması oluşturun. Bu görev, işlevsel bir zamanlama uygulaması oluşturmak için ticker'ları, döngüleri ve süre hesaplamalarını birleştirme becerinizi test edecektir.
İki girdi alacaksınız:
"value:unit"biçiminde geri sayım süresini içeren bir dize (ör."10:Second"veya"3:Minute")"value:unit"biçiminde güncelleme aralığını içeren bir dize (ör."1:Second")
Göreviniz:
- Geri sayım süresi değerini ve birimini çıkarmak için ilk girdiyi iki nokta üst üste karakterine göre bölümlere ayırın
- Güncelleme aralığı değerini ve birimini çıkarmak için ikinci girdiyi iki nokta üst üste karakterine göre bölümlere ayırın
- Dize değerlerini
strconvpaketini kullanarak tamsayılara dönüştürün - Uygun sabitleri kullanarak hem geri sayım süresi hem de güncelleme aralığı için
time.Durationnesneleri oluşturun:"Second"için:time.Secondile çarpın"Minute"için:time.Minuteile çarpın"Hour"için:time.Hourile çarpın
- Sayaç başlığını görüntüleyin:
"=== COUNTDOWN TIMER ===" - Sayaç ayarını görüntüleyin:
"Starting countdown from [countdown_duration_object]" - Güncelleme sıklığını görüntüleyin:
"Updates every [update_interval_object]" - Güncelleme aralığı süresini kullanarak
time.NewTickerile bir ticker oluşturun - Geriye kalan süre değişkenini geri sayım süresiyle başlatın
- Geri sayım yapmak için bir döngü kullanın:
<-ticker.Ckullanarak her ticker olayını bekleyin- Güncelleme aralığını geriye kalan süreden çıkarın
- Geriye kalan süre 0'dan büyükse şunu görüntüleyin:
"Time remaining: [remaining_time_object]" - Geriye kalan süre 0 veya daha azsa şunu görüntüleyin:
"Time's up!"ve döngüden çıkın
ticker.Stop()kullanarak ticker'ı durdurun- Tamamlanma istatistiklerini görüntüleyin:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(geriye kalan sürenin kaç kez görüntülendiğini hesaplayın)
- Tamamlanma mesajını görüntüleyin:
"Countdown timer finished successfully"
Ticker ve süre işlemleri için time paketini, girdi dizelerini bölmek için strings paketini, dizeleri tamsayılara dönüştürmek için strconv paketini ve çıktı için fmt paketini kullanın. time.NewTicker işlevinin kanalında düzenli aralıklarla değerler gönderen bir ticker döndürdüğünü ve kaynakları serbest bırakmak için işiniz bittiğinde ticker.Stop() çağırmanız gerektiğini unutmayın. Bu görev, Go'nun zamanlama mekanizmalarını kullanarak pratik bir geri sayım sayacının nasıl oluşturulacağını gösterir.
Kendin dene
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Girdiyi oku
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Geri sayım süresi girdisini ayrıştır
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Güncelleme aralığı girdisini ayrıştır
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Kodunuzu aşağıya yazın
// Switch ifadelerini kullanarak time.Duration nesnelerine dönüştürün
// Geri sayım sayacını oluşturun (test için gerçek gecikmeler olmadan simüle edin)
// Geri sayım döngüsünü uygulayın
// Gerekli tüm mesajları ve istatistikleri görüntüleyin
// Not: Test amaçlı olarak, gerçek zaman gecikmeleri olmadan ticker davranışını simüle edin
}Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme7Derinlemesine Hata Yönetimi
Özel Hata Türleri`%w` ile Hataları Sarmalama`errors.Is` ile Sarmalı Açma`errors.As` ile Sarmalı Açma`panic` Kavramını Anlamak`recover` KullanımıÖzet - Güvenli Bölme10Zamanla Çalışmak
Şu Anki Zamanı AlmaBelirli Bir Zaman OluşturmaZamanı FormatlamaZaman Dizelerini AyrıştırmaZaman SüresiZaman AritmetiğiUyutma ve Ticker'larÖzet - Basit Zamanlayıcı2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi