Heim >Backend-Entwicklung >Golang >Wie führe ich täglich mittags eine Go-Funktion aus, während gleichzeitige Benutzereingaben verarbeitet werden?

Wie führe ich täglich mittags eine Go-Funktion aus, während gleichzeitige Benutzereingaben verarbeitet werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-21 06:23:091058Durchsuche

How to Execute a Go Function Daily at Noon While Handling Concurrent User Input?

Code mittags in Golang ausführen

In diesem Szenario wollen wir jeden Tag mittags eine bestimmte Funktion ausführen und dabei Benutzereingaben verarbeiten der Rest der Programmausführung. Mehrere Ansätze können dies effektiv erreichen:

Intervall-Timer

Timer-Funktionen in Go ermöglichen es uns, Aufgaben in vordefinierten Intervallen auszuführen. Um täglich eine Funktion mittags zu planen, können wir Folgendes verwenden:

  • timer.AfterFunc(): Führt eine Funktion nach einer bestimmten Dauer aus.
  • time.Tick(): Gibt einen Kanal zurück, der die aktuelle Zeit zum angegebenen Zeitpunkt sendet Intervall.
  • time.Sleep(): Pausiert das Programm für eine bestimmte Dauer.
  • time.Ticker: Ähnlich wie timer.Tick( ), stellt aber einen Kanal bereit, der die aktuelle Zeit im angegebenen Intervall sendet und nach jedem zurücksetzt senden.

Berechnung des Intervalls

Um das Intervall zwischen der aktuellen Zeit und dem nächsten Mittag zu bestimmen, berechnen wir zunächst die verbleibende Zeit bis zum ersten Mittag danach Das Programm startet. Wir verwenden dann ein 24-Stunden-Intervall für nachfolgende Mittagsaufgaben.

Beispielcode mit time.Sleep:

package main

import "fmt"
import "time"

func noonTask() {
    fmt.Println(time.Now())
    fmt.Println("do some job.")
}

func initNoon() {
    t := time.Now()
    n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
    d := n.Sub(t)
    if d < 0 {
        n = n.Add(24 * time.Hour)
        d = n.Sub(t)
    }
    for {
        time.Sleep(d)
        d = 24 * time.Hour
        noonTask()
    }
}

func main() {
    initNoon()
}

Mit timer.AfterFunc:

package main

import (
    "fmt"
    "sync"
    "time"
)

func noonTask() {
    fmt.Println(time.Now())
    fmt.Println("do some job.")
    timer.AfterFunc(duration(), noonTask)
}

func main() {
    timer.AfterFunc(duration(), noonTask)
    wg.Add(1)
    // do normal task here
    wg.Wait()
}

func duration() time.Duration {
    t := time.Now()
    n := time.Date(t.Year(), t.Month(), t.Day(), 12, 0, 0, 0, t.Location())
    if t.After(n) {
        n = n.Add(24 * time.Hour)
    }
    d := n.Sub(t)
    return d
}

var wg sync.WaitGroup

Zusätzlich Informationen

  • [Github: Gocron](https://github.com/jasonlvhit/gocron) bietet eine Hilfsbibliothek zum Planen von Jobs in Go.
  • [Golang - So führen Sie eine Funktion zu einem bestimmten Zeitpunkt aus Zeiten](https://tutorialedge.net/golang/golang-execute-function-special-times/)
  • [Golang: Implementieren eines Crons / Ausführen von Aufgaben zu einem bestimmten Zeitpunkt](https://blog .logrocket.com/how-to-implement-a-cron-in-golang/)

Das obige ist der detaillierte Inhalt vonWie führe ich täglich mittags eine Go-Funktion aus, während gleichzeitige Benutzereingaben verarbeitet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn