package main
import (
"fmt"
"net/http"
"time"
)
func main() {
// 创建一个定时器,每隔1秒钟执行一次
ticker := time.NewTicker(1 * time.Second)
done := make(chan bool)
//设置3s超时,避免请求时间过长
client := http.Client{
Timeout: 3 * time.Second,
}
go func() {
for {
select {
case <-done:
// 定时任务结束
return
case <-ticker.C:
//请求url,www.baidu.com
resp, _ := client.Get("https://www.baidu.com")
//关闭请求
defer resp.Body.Close()
//打印状态码
fmt.Println(resp.StatusCode)
fmt.Println("定时任务执行中...")
}
}
}()
//select {} 语句会阻塞主线程,等待一个永远不会到来的信号。程序会一直运行,直到手动停止
select {}
// 等待5秒钟后停止定时任务
time.Sleep(5 * time.Second)
// 停止定时器
ticker.Stop()
// 发送停止信号
done <- true
fmt.Println("定时任务已停止")
}
想5秒内结束就注释掉select{}
在linux上后台执行的话,可以这样
nohup go run channel.go &