Menu
Coddy logo textTech

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.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

challenge icon

Görev

Kolay

Rehberli 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:

  1. Bireysel meditasyon adımlarını elde etmek için ilk girdiyi virgüllere göre ayırarak ayrıştırın
  2. Her adım için, talimatı ve süreyi (saniye cinsinden) ayıklamak üzere iki noktaya göre ayırın
  3. strconv paketini kullanarak süre dizelerini tam sayılara dönüştürün
  4. Döngü sayısını elde etmek için ikinci girdiyi bir tam sayıya dönüştürün
  5. Oturum başlığını görüntüleyin: "=== MEDITATION TIMER ==="
  6. Oturum kurulumunu görüntüleyin: "Starting meditation session with [number_of_cycles] cycles"
  7. 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.Sleep kullanın (saniyeleri time.Second ile çarparak time.Duration'a dönüştürün)
      • Uykudan sonra şunu görüntüleyin: "[instruction] complete ([duration] seconds)"
    • Bir döngüdeki tüm adımları tamamladıktan sonra şunu görüntüleyin: "Cycle [cycle_number] finished"
  8. 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ı)
  9. 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
	
}
quiz iconKendini test et

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