Özet - Basit Zamanlayıcı
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 65 / 68.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBelirli bir süreden sıfıra doğru geri sayım yapan ve düzenli aralıklarla ilerleme mesajları görüntüleyen, 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 yeteneğinizi test edecektir.
İki girdi alacaksınız:
"value:unit"formatında geri sayım süresini içeren bir dize (örneğin,"10:Second"veya"3:Minute")"value:unit"formatında güncelleme aralığını içeren bir dize (örneğin,"1:Second")
Göreviniz şunları yapmaktır:
- Geri sayım süresi değerini ve birimini ayıklamak için ilk girdiyi iki nokta üst üste işaretinden bölerek ayrıştırın
- Güncelleme aralığı değerini ve birimini ayıklamak için ikinci girdiyi iki nokta üst üste işaretinden bölerek ayrıştırın
strconvpaketini kullanarak dize değerlerini tam sayı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
- Zamanlayıcı başlığını görüntüleyin:
"=== COUNTDOWN TIMER ===" - Zamanlayıcı kurulumunu 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 - Geri sayım süresi ile bir kalan süre değişkeni başlatın
- Geri sayım yapmak için bir döngü kullanın:
<-ticker.Ckullanarak her ticker olayını bekleyin- Kalan süreden güncelleme aralığını çıkarın
- Kalan süre 0'dan büyükse şunu görüntüleyin:
"Time remaining: [remaining_time_object]" - Kalan süre 0 veya daha azsa,
"Time's up!"mesajını görüntüleyin ve döngüden çıkın
ticker.Stop()kullanarak ticker'ı durdurun- Tamamlama istatistiklerini görüntüleyin:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(kalan sürenin kaç kez görüntülendiğini hesaplayın)
- Tamamlama 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 tam sayılara dönüştürmek için strconv paketini ve çıktı için fmt paketini kullanın. time.NewTicker fonksiyonunun, 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() fonksiyonunu ç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ışlar