Go
Ping Cronping from Go applications and scripts.
Go's standard library net/http package is all you need — no external dependencies required.
Basic usage
package main
import (
"fmt"
"net/http"
"time"
)
func pingCronping(token string) {
client := &http.Client{Timeout: 10 * time.Second}
url := "https://ping.cronping.com/" + token
resp, err := client.Get(url)
if err != nil {
fmt.Printf("Cronping ping failed: %v\n", err)
return // Don't exit — the job succeeded
}
defer resp.Body.Close()
}
func main() {
// ... your job logic ...
pingCronping("<token>")
}With context and timeout
Using context gives you more control over cancellation:
package main
import (
"context"
"fmt"
"net/http"
"time"
)
func pingCronping(token string) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://ping.cronping.com/"+token, nil)
if err != nil {
fmt.Printf("Cronping request creation failed: %v\n", err)
return
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("Cronping ping failed: %v\n", err)
return
}
defer resp.Body.Close()
}As a deferred call
Run the ping automatically at the end of a function, even if it returns early:
package main
import (
"fmt"
"net/http"
"time"
)
func pingCronping(token string) {
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get("https://ping.cronping.com/" + token)
if err != nil {
fmt.Printf("Cronping ping failed: %v\n", err)
return
}
defer resp.Body.Close()
}
func runBackup() error {
defer pingCronping("<token>") // always runs on success path
// ... your job logic ...
return nil
}
func main() {
if err := runBackup(); err != nil {
fmt.Printf("Job failed: %v\n", err)
}
}In a cron job (robfig/cron)
package main
import (
"fmt"
"net/http"
"time"
"github.com/robfig/cron/v3"
)
func pingCronping(token string) {
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get("https://ping.cronping.com/" + token)
if err != nil {
fmt.Printf("Cronping ping failed: %v\n", err)
return
}
defer resp.Body.Close()
}
func main() {
c := cron.New()
c.AddFunc("0 3 * * *", func() {
// ... your job logic ...
pingCronping("<token>")
})
c.Start()
select {} // block forever
}