Метод time.Ticker.Stop

Метод time.Ticker.Stop останавливает тикер, прекращая отправку значений времени в его канал. После вызова этого метода канал тикера больше не будет получать новые значения. Метод возвращает bool: true, если тикер был остановлен впервые, и false, если тикер уже был остановлен ранее.

Синтаксис

goticker.Stop()

Пример

Давайте создадим тикер и остановим его через некоторое время:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  ticker := time.NewTicker(500 * time.Millisecond)
  go func() {
    for t := range ticker.C {
      fmt.Println(t)
    }
  }()
  time.Sleep(2 * time.Second)
  stopped := ticker.Stop()
  fmt.Println("Ticker stopped:", stopped)
  time.Sleep(1 * time.Second)
}

Результат выполнения кода:

go"2026-09-04 10:00:00.5 +0300 MSK m=+0.500000001"
"2026-09-04 10:00:01.0 +0300 MSK m=+1.000000001"
"2026-09-04 10:00:01.5 +0300 MSK m=+1.500000001"
"2026-09-04 10:00:02.0 +0300 MSK m=+2.000000001"
"Ticker stopped: true"

Пример

Давайте попробуем остановить уже остановленный тикер:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  ticker := time.NewTicker(1 * time.Second)
  stopped1 := ticker.Stop()
  stopped2 := ticker.Stop()
  fmt.Println("First stop:", stopped1)
  fmt.Println("Second stop:", stopped2)
}

Результат выполнения кода:

go"First stop: true"
"Second stop: false"

Пример

Давайте используем Stop для корректного завершения работы горутины:

gopackage main

import (
  "fmt"
  "time"
)

func main() {
  ticker := time.NewTicker(300 * time.Millisecond)
  done := make(chan bool)
  go func() {
    for {
      select {
      case t := <-ticker.C:
        fmt.Println("Tick at:", t)
      case <-done:
        fmt.Println("Goroutine stopped")
        return
      }
    }
  }()
  time.Sleep(1 * time.Second)
  ticker.Stop()
  done <- true
  time.Sleep(200 * time.Millisecond)
}

Результат выполнения кода:

go"Tick at: 2026-09-04 10:00:00.3 +0300 MSK m=+0.300000001"
"Tick at: 2026-09-04 10:00:00.6 +0300 MSK m=+0.600000001"
"Tick at: 2026-09-04 10:00:00.9 +0300 MSK m=+0.900000001"
"Goroutine stopped"

Смотрите также

  • тип time.Ticker,
    который представляет тикер для периодических событий
  • метод time.Ticker.Reset,
    который изменяет интервал срабатывания тикера
  • тип time.Timer,
    который представляет таймер для однократного события
  • метод time.Timer.Stop,
    который останавливает таймер