Uyutma ve Ticker'lar
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 64 / 68.
Bazen programınızın yürütme zamanlamasını kontrol etmeniz gerekir. Go, bunun için time paketinde iki temel fonksiyon sunar: yürütmeyi duraklatmak için time.Sleep ve düzenli aralıklarla eylemler gerçekleştirmek için time.NewTicker.
time.Sleep fonksiyonu, programınızı belirli bir süre boyunca duraklatır. Parametre olarak bir time.Duration alır ve bu süre geçene kadar yürütmeyi engeller:
fmt.Println("Starting...")
time.Sleep(2 * time.Second)
fmt.Println("Two seconds have passed!")Düzenli aralıklarla tekrarlanan işlemler için, time.NewTicker belirli aralıklarla bir kanal üzerinden değerler gönderen bir ticker (zamanlayıcı) oluşturur. Bu, periyodik olarak çalışması gereken görevler için kullanışlıdır:
ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
<-ticker.C // Bir sonraki tıkı bekle
fmt.Println("Tick", i+1)
}Bu zamanlama fonksiyonları, Go programlarınızda gecikmeler oluşturmak, zaman aşımları uygulamak ve tekrarlanan işlemleri planlamak için gereklidir.
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
KolayRehberli talimatlar arasında duraklamalar oluşturmak için time.Sleep kullanan ve Go programlarındaki temel zamanlama kontrolünü gösteren bir meditasyon seansı zamanlayıcısı oluşturun.
İki girdi alacaksınız:
"step1:duration,step2:duration,step3:duration"formatında meditasyon adımlarını içeren bir dize (örneğin,"Breathe in:3,Hold:2,Breathe out:4")- Tekrarlanacak döngü sayısını içeren bir dize (örneğin,
"5")
Göreviniz şunları yapmaktır:
- Bireysel meditasyon adımlarını elde etmek için ilk girdiyi virgüllere göre ayırarak ayrıştırın
- Her adım için, talimatı ve süreyi (saniye cinsinden) ayıklamak üzere iki noktaya göre ayırın
strconvpaketini kullanarak süre dizelerini tam sayılara dönüştürün- Döngü sayısını elde etmek için ikinci girdiyi bir tam sayıya dönüştürün
- Oturum başlığını görüntüleyin:
"=== MEDITATION TIMER ===" - Oturum kurulumunu görüntüleyin:
"Starting meditation session with [number_of_cycles] cycles" - Her döngü için (1. döngüden başlayarak):
- Şunu görüntüleyin:
"--- Cycle [cycle_number] ---" - Her meditasyon adımı için:
- Şunu görüntüleyin:
"[instruction]..." - Belirtilen süre boyunca duraklamak için
time.Sleepkullanın (saniyeleritime.Secondile çarparaktime.Duration'a dönüştürün) - Uykudan sonra şunu görüntüleyin:
"[instruction] complete ([duration] seconds)"
- Şunu görüntüleyin:
- Bir döngüdeki tüm adımları tamamladıktan sonra şunu görüntüleyin:
"Cycle [cycle_number] finished"
- Şunu görüntüleyin:
- Tüm döngüler tamamlandıktan sonra oturum özetini görüntüleyin:
"=== SESSION COMPLETE ===""Total cycles completed: [number_of_cycles]""Steps per cycle: [number_of_steps]""Total meditation time: [total_seconds] seconds"(tüm adım sürelerinin toplamının döngü sayısıyla çarpımı)
- Tamamlanma mesajını görüntüleyin:
"Meditation session finished - well done!"
Uyku 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.Sleep fonksiyonunun bir time.Duration parametresi aldığını unutmayın, bu nedenle uygun süre değerini oluşturmak için tam sayı saniyelerinizi time.Second ile çarpmanız gerekir. Bu zorluk, rehberli meditasyon veya egzersiz zamanlayıcıları gibi pratik uygulamalar için program yürütmede zamanlanmış duraklamalar oluşturmak üzere time.Sleep'in nasıl kullanılacağını gösterir.
Kopya kağıdı
Program yürütmesini belirli bir süre duraklatmak için time.Sleep kullanın:
time.Sleep(2 * time.Second)Düzenli aralıklarla eylemler gerçekleştirmek için time.NewTicker kullanın:
ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
<-ticker.C // Bir sonraki tıkı bekleyin
fmt.Println("Tick", i+1)
}Her iki fonksiyon da time.Duration değerlerini kullanır. Tam sayıları time.Second ile çarparak süreye dönüştürün.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
"time"
)
func main() {
// Boşlukları düzgün bir şekilde işlemek için bufio.Scanner kullanarak girişi oku
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
stepsInput := scanner.Text()
scanner.Scan()
cyclesInput := scanner.Text()
// Meditasyon adımlarını ve döngülerini ayrıştır
steps := strings.Split(stepsInput, ",")
cycles, _ := strconv.Atoi(cyclesInput)
// TODO: Kodunuzu aşağıya yazın
// Talimatı ve süreyi çıkarmak için her adımı ayrıştırın
// Erişmeden önce parts diliminin yeterli öğeye sahip olup olmadığını kontrol etmeyi unutmayın
// Oturum başlığını ve kurulumu görüntüleyin
// Döngüler ve adımlar arasında gezinin
// Duraklatmalar için time.Sleep kullanın (test için milisaniye kullanmayı düşünün)
// Tamamlama mesajlarını ve özeti görüntüleyin
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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