Go Academy · Lekcja

Tickery do obsługi interwałów

Powtarzaj zadania w stałych odstępach

Lekcja 3 z 413 kroki

Tickery do obsługi interwałów to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Powtarzanie ze stałą częstotliwością

Gdy trzeba po prostu wykonywać coś co N sekund, właściwym narzędziem jest Ticker. W przeciwieństwie do pętli z uśpieniem działa on w stałym rytmie i nie rozjeżdża się pod wpływem czasu potrzebnego na wykonanie pracy.

Tworzenie obiektu Ticker

time.NewTicker(d) zwraca obiekt Ticker, którego kanał C otrzymuje bieżący czas co d.

ticker := time.NewTicker(time.Second)
defer ticker.Stop()

Zawsze zatrzymuj obiekt Ticker

Ticker utrzymuje aktywny wewnętrzny timer. Jeśli nigdy nie zostanie wywołane Stop(), dojdzie do wycieku zasobów. Należy użyć defer ticker.Stop() od razu po jego utworzeniu.

Iterowanie po kanale

Po kanale tickera można iterować za pomocą range, aby reagować na każde tyknięcie.

for t := range ticker.C {
    fmt.Println("tick at", t)
}

Zatrzymywanie za pomocą select

Ticker można połączyć z kanałem done, aby pętla mogła zakończyć się w uporządkowany sposób.

for {
    select {
    case <-ticker.C:
        doWork()
    case <-done:
        return
    }
}

Ticker a Timer

Najważniejsza różnica:

  • Timer uruchamia się raz po upływie opóźnienia
  • Ticker uruchamia się wielokrotnie w określonych odstępach

Timera należy używać do jednorazowych limitów czasu, a Ticker — do pracy wykonywanej okresowo.

Wygoda funkcji time.Tick

time.Tick(d) zwraca tylko kanał. Jest to wygodne rozwiązanie, ale nie można go zatrzymać, więc w programach działających długo prowadzi do wycieku zasobów. Poza krótkimi skryptami lepiej używać NewTicker.

for range time.Tick(time.Second) {
    // simple, but cannot Stop -> avoid in servers
}

Obsługa powolnej pracy

Jeśli wykonanie pracy trwa dłużej niż odstęp, ticki nie są kolejkowane; ticker je pomija zamiast generować ich serię. Dzięki temu nie powstaje zaległa kolejka, ale przy dużym obciążeniu można pominąć niektóre uderzenia.

Dostosowywanie częstotliwości

Aby zmienić odstęp, należy utworzyć nowy ticker. W Go 1.15+ dostępna jest również funkcja ticker.Reset(d), która zmienia okres bez ponownej alokacji.

ticker.Reset(500 * time.Millisecond)

Anulowanie za pomocą contextu

W rzeczywistych usługach pętle tickerów powinny być sterowane za pomocą context.Context, aby sygnały zamknięcia mogły je łagodnie zatrzymać.

case <-ctx.Done():
    return ctx.Err()

Program do uruchomienia: Ticker o stałej częstotliwości

Ten samodzielny program wykonuje trzy tyknięcia w stałym odstępie, a następnie zatrzymuje się w uporządkowany sposób za pomocą licznika.

package main

import (
    "fmt"
    "time"
)

func main() {
    ticker := time.NewTicker(10 * time.Millisecond)
    defer ticker.Stop()
    count := 0
    for range ticker.C {
        count++
        fmt.Println("tick", count)
        if count == 3 {
            break
        }
    }
    fmt.Println("done")
}

Szybkie sprawdzenie

Proszę sprawdzić zrozumienie działania tickerów.

Podsumowanie

Opanowano korzystanie z tickerów do odmierzania odstępów:

  • time.NewTicker(d) uruchamia się co d na swoim kanale C
  • Zawsze należy używać defer ticker.Stop(), aby uniknąć wycieków zasobów
  • Przy powolnej pracy tickery pomijają uderzenia zamiast generować ich serię
  • Do zmiany częstotliwości służy Reset, a do zakończenia — context lub kanał done
Bezpłatny start

Ucz się Go dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Tickery do obsługi interwałów” jest bezpłatna?

Tak — pełny tekst „Tickery do obsługi interwałów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Tickery do obsługi interwałów”?

Powtarzaj zadania w stałych odstępach Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Tickery do obsługi interwałów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Planowanie oparte na czasie
  2. Biblioteka robfig/cron
  3. Tickery do obsługi interwałów
  4. Kontrolowane zatrzymywanie zadań
← Powrót do Go Academy