Как остановить работу cron в golang, если условие ложно? - PullRequest
0 голосов
/ 04 октября 2018

Я делаю работу cron для непрерывного мониторинга данных.В функции задания cron есть условие, при котором я хочу остановить задание cron, но я не знаю, как отключить задание cron.Ниже приводится функция, которую я использую: -

CronController.go

 func AutomaticChargedCron(c *gin.Context) {
     err:= //there is function which gives the value to err 
     if err != nil {
        fmt.Println("There is something wrong please try again later.", err)     
        //I want to stop the cron here
     } 
 }  

cron.go

package cron

import (
    "gopkg.in/robfig/cron.v2"
)
func RunCron() {
    c := cron.New()

    c.AddFunc("@every 0h10m0s", AutomaticChargedCron)
    c.Start()
}

func AutomaticChargedCron() {
    utils.ExecuteCommand("sh " + config.GetBasePath() + "sh/charged.sh") 
}

charged.sh

 curl "http://localhost:8080/api/v1/charged"

Router.go

 func main() {
   router := gin.Default()

   router.GET("/charged", controllers.AutomaticChargedCron)

   router.Run()
   router.Run(":8080") 
}

Я использовал c.Stop(), но выдает ошибку

c.Stop undefined (тип * gin.Context не имеет поля или метод Stop)

Может кто-нибудь сказать мне об этом.

Спасибо:)

1 Ответ

0 голосов
/ 04 октября 2018

Это потому, что имя переменной c используется дважды, одна для задания cron, а другая как *gin.Contex внутри функции-обработчика.

ее можно уменьшить простым переименованием переменной.

cr := cron.New()
# and rename all occurrence of cron `c` as `cr`
cr.Stop()

Обновление

переименование необходимо, только если вы пытаетесь использовать cron c внутри функции обработчика, которая использует (c *gin.Contex).c в параметре функции затеняет глобальный cron c.

...