Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Fungsi Go Setiap Hari Pada Tengah Hari Semasa Mengendalikan Input Pengguna Serentak?

Bagaimana untuk Melaksanakan Fungsi Go Setiap Hari Pada Tengah Hari Semasa Mengendalikan Input Pengguna Serentak?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-21 06:23:091061semak imbas

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

Melaksanakan Kod pada Tengah Hari di Golang

Dalam senario ini, kami menyasarkan untuk menjalankan fungsi tertentu pada waktu tengah hari setiap hari sambil mengendalikan input pengguna semasa baki pelaksanaan program. Beberapa pendekatan boleh mencapai matlamat ini dengan berkesan:

Pemasa Selang

Fungsi Pemasa dalam Go membolehkan kami melaksanakan tugas pada selang masa yang telah ditetapkan. Untuk menjadualkan fungsi pada tengah hari setiap hari, kita boleh menggunakan:

  • pemasa.AfterFunc(): Melaksanakan fungsi selepas tempoh yang ditetapkan.
  • masa.Tick(): Mengembalikan saluran yang menghantar masa semasa pada selang waktu yang ditentukan.
  • masa.Sleep(): Menjeda program untuk tempoh yang ditetapkan.
  • masa.Ticker: Sama seperti pemasa.Tick(), tetapi menyediakan saluran yang menghantar masa semasa pada selang waktu yang ditentukan dan menetapkan semula selepas setiap penghantaran.

Mengira Selang

Untuk menentukan selang antara waktu semasa dan tengah hari berikutnya, kita mula-mula mengira masa yang tinggal sehingga tengah hari pertama selepas program bermula. Kami kemudian menggunakan selang 24 jam untuk tugas tengah hari berikutnya.

Kod Contoh menggunakan masa.Tidur:

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()
}

Menggunakan pemasa.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

Maklumat Tambahan

  • [Github: Gocron](https://github.com/jasonlvhit/gocron) menyediakan perpustakaan utiliti untuk penjadualan kerja dalam Go.
  • [Golang - Cara melaksanakan fungsi pada masa tertentu](https://tutorialedge.net/golang/golang-execute-function-specific-times/)
  • [Golang: Melaksanakan cron / melaksanakan tugas pada masa tertentu](https://blog.logrocket.com/how-to-implement-a-cron-in-golang/)

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Go Setiap Hari Pada Tengah Hari Semasa Mengendalikan Input Pengguna Serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn