go 实现零点准时传递新春祝福

简介: 实现一个零点定时推送祝福的需求其实很简单,关键点是零点定时和推送消息出去两个功能。- 零点定时推送,可以使用 corn 包实现定时任务- 推送消息,调用飞书和企业微信提供的 webhook 接口,就可以实现消息的推送

前言

新年到了,自然新春祝福也是少不了的。为了能够准时给同事和客户发出自己的零点新春祝福,以此来表达自己的真诚祝福。所以准备在使用飞书和企业微信里的 webhook 功能实现零点准时发送新春祝福语。

分析

实现一个零点定时推送祝福的需求其实很简单,关键点是零点定时和推送消息出去两个功能。

  • 零点定时推送,可以使用 corn 包实现定时任务
  • 推送消息,调用飞书和企业微信提供的 webhook 接口,就可以实现消息的推送

详细设计

定时任务

安装 cron 包,然后就可以使用它创建一个简单的调度中心。

go get -u github.com/robfig/cron/v3

创建一个简单的任务调度可以直接使用 addFunc 方法。

c := cron.New()

c.AddFunc("@every 1s", func() {
   fmt.Println("hello")
})
    c.Start()

从上面简单的源码看到,其创建了一个每秒都会输出 hello 。@every 1s就是这个定时任务的触发事件。那么再看下 cron 官网中说明,触发时间支持 cron 表达式:

# 文件格式说明
┌──秒(0 - 59)
│ ┌──分钟(0 - 59)
│ │  ┌──小时(0 - 23)
│ │  │  ┌──日(1 - 31)
│ │  │  │  ┌─月(1 - 12)
│ │  │  │  │  ┌─星期(0 - 6,表示从周日到周六,该值不是非必需的)
│ │  │  │  │  │
* *  *  *  *  * 

所以如果要在整点准时发送触发任务执行,只需设置时间表达式:0 0 0 22 1 *。这样就可以在零点时间准时出发定时任务然后执行具体消息推送的功能。

消息推送

消息推送也是个比较简单的功能,就是通过http 请求hook 的地址发送消息。其中祝福语就可以自己编写好。

func sendMsg(apiUrl, msg string) {
    contentType := "application/json"
    sendData := `{
        "msg_type": "text",
        "content": {"text": "` + "六号积极分子的祝福:" + msg + `"}
    }`
    result, err := http.Post(apiUrl, contentType, strings.NewReader(sendData))
    if err != nil {
        fmt.Printf("post failed, err:%v\n", err)
        return
    }
    defer result.Body.Close()
}

使用自己编写好的祝福语在零点时候发送出去更加能体现自己的真诚。

如果使用企业微信自己内部应用的话,使用消息推送可以专门给具体的用户发送消息,这样就可以实现对具体的同事或客户发送祝福语。详细企业微信接口地址:https://developer.work.weixin.qq.com/document/path/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF

请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
文本消息:
{
   "touser" : "UserID1|UserID2|UserID3",
   "toparty" : "PartyID1|PartyID2",
   "totag" : "TagID1 | TagID2",
   "msgtype" : "text",
   "agentid" : 1,
   "text" : {
       "content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href="http://work.weixin.qq.com">邮件中心视频实况</a>,聪明避开排队。"
   },
   "safe":0,
   "enable_id_trans": 0,
   "enable_duplicate_check": 0,
   "duplicate_check_interval": 1800
}

祝福大家新春快乐!!!

源码在马上掘金上:https://code.juejin.cn/pen/7194483912859451451

目录
相关文章
|
存储 前端开发 关系型数据库
Go 实现更换新春首页和皮肤配置
新春佳节到来了,各种 APP 的开启首页图片和皮肤样式都会发生变化,它们都将会更新成和新春有关系的图片广告或者新春相关的背景图片。当一个运营负责这项工作时,只需要开发一个可配置的功能,运营只需进行设置就可以完成新春首页替换和新年红皮肤更新。
172 0
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
环境搭建 GO+版的祝福语管理系统 前期想法 界面展示 整体界面 增加祝福信息 修改操作 删除操作 退出
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
|
8月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
8月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
2月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
2月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
3月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
3月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
244 0
|
4月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。