​

1、场景

想象下以下场景,嘿嘿...!

一个iphone用户,闹钟是可以按节假日不响的!

每日新闻机器人,节假日是可以不打扰我的!

我的业务,节假日是可以...

2、思路

要实现识别节假日,大概有两种方式:

1、自己收集国家法定节假日数据,离线存储

优势:离线简单

劣势:新一年要去更新,容易忘记,麻烦

2、调用第三方接口数据

优势:不需要我们操心数据本身

劣势:有次数限制

本次介绍调用第三方接口的方式,用golang实现整个过程。

3、接口分析

分析了网上现有接口,发现juhe的api接口会比较合适,详细:

https://www.juhe.cn/docs/api/id/606

分析:

请求详情:

请求地址:http://apis.juhe.cn/fapig/calendar/day
请求参数:date=2023-01-16&detail=&key=c6ff98d3**\*\***be4a35b2
请求方式:GET
Header:
Content-Type:application/x-www-form-urlencoded

返回内容:

{
"reason":"success",
"result":{
"date":"2023-01-16",
"week":"星期一",
"statusDesc":"工作日",
"status":null
},
"error_code":0
}

4、golang实现

4.1、json2go小工具

这里我们利用下json转golang struct的小工具,把接口返回的json转成golang的代码

https://www.bejson.com/transfor/json2go/

4.2、代码实现

package main

import (
"encoding/json"
"fmt"
) func main() {
// 当前日期
todayStr := time.Unix(time.Now().Unix(), 0).Format("2006-01-02")
key := "xxxxxxx" //获取,节假日信息查询接口 https://dashboard.juhe.cn/data/index/my // 判断当前是否是节假日(周末也算节假日,除非是节假日后补班情况),节假日跳过
calendarJh := new(util.CalendarJH)
isHolidays := calendarJh.IsHolidays(&todayStr, &key)
if isHolidays {
fmt.Printf("%v 是节假日,今天跳过!\n", todayStr)
return
}
} // IsHolidays 是否是节假日(周末也算节假日,除非是节假日后补班情况)
func (calendarJH *CalendarJH) IsHolidays(date *string, key *string) bool { // 默认返回是节假日
result := true // 调用juhe api 接口
juheAPI := "https://apis.juhe.cn/fapig/calendar/day?date=" + *date + "&detail=1&key=" + *key
body, _ := HttpGetInfo(&juheAPI)
err := json.Unmarshal(*body, calendarJH)
if err != nil {
fmt.Printf("调用juhe接口出错,默认返回是节假日,错误原因:%v \n", err)
return result
} if calendarJH.Result.Status == "1" {
result = true
return result
} else if calendarJH.Result.Status == "2" {
result = false
return result
} else if calendarJH.Result.Status == nil { if calendarJH.Result.StatusDesc == "周末" {
result = true
return result
} else if calendarJH.Result.StatusDesc == "工作日" {
result = false
return result
}
} return result
} // CalendarJH 日历数据,来自juhe
type CalendarJH struct {
Reason string `json:"reason"`
Result Result `json:"result"`
ErrorCode int `json:"error_code"`
}
type Result struct {
Date string `json:"date"`
Week string `json:"week"`
StatusDesc string `json:"statusDesc"` //状态描述,节假日/工作日/周末。1.当status为1时,表示节假日;2.当status为2时,表示工作日;3.当status为null时,如果week为周六或者周日,表示周末,否则表示工作日
Status interface{} `json:"status"` //当天状态标识,1:节假日,2:工作日,null:周末或工作日(可根据week进行判断,也可以直接根据statusDesc进行判断)
}

最后,若对您有帮助,请关注我,谢谢!

Golang如何实现节假日不打扰用户?的更多相关文章

  1. Golang的交互模式进阶-读取用户的输入

    Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出. ...

  2. Android中使用抖动动画吸引来用户注意

    原文:http://www.androidcn.org/topic/552e65bc61d460226ab27a5c 在应用中,有时候我们要吸引用户去点击某些按钮,比如应用市场的推荐按钮,为了能够吸引 ...

  3. 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证

    本文核心内容是利用jwt-go中间件来开发golang webapi用户登陆模块的token下发和验证,小程序登陆功能只是一个切入点,这套逻辑同样适用于其他客户端的登陆处理. 小程序登陆逻辑 小程序的 ...

  4. oracle之创建和管理数据库用户账户

    创建和管理数据库用户账户 sys 查看数据库里有多少用户?select username from dba_users; 9.1.1用户的缺省表空间 每个用户账户都可以指定默认的表空间,用户创建的任何 ...

  5. Golang(go语言)开发环境配置

    VSCode开发环境配置 目录 VSCode开发环境配置 先到VSCode官网去下载适合自己系统的VSCode安装软件 演示在WIndows下 安装使用 演示在Linux(Ubuntu/centos) ...

  6. 【码云周刊第 22 期】GO :互联网时代的 C 语言!

    技术干货 标签:独家译文 1.Go 很好,为什么我们不使用它? 在这篇文章中,我将分享一下为什么我认为它很棒,使用它的一些缺点,以及为什么它还不是我们 Zapier 堆栈中的一部分. 2.从 Scal ...

  7. GO :互联网时代的 C 语言!

    摘要: 每周为您推送最有价值的开源技术内参! 技术干货 标签:独家译文 1.Go 很好,为什么我们不使用它? 在这篇文章中,我将分享一下为什么我认为它很棒,使用它的一些缺点,以及为什么它还不是我们 Z ...

  8. CPCT精细化运营:客户、产品、渠道、时机

    关键词:CPCT.精细化运营思维.客户.产品.渠道.时机.运营 电信运营商市场饱和,用户新增主要靠弃卡后重新入网以及异网用户策反. 用户新增已如此艰难,所以更加关注存量用户经营. 运营商营销资源不断收 ...

  9. 【iOS开发】在 App 中加入 AdMob 广告 - 入门介绍与编程技巧

    前言 虽然在App中加入广告来盈利是比较低级的商业化方式,但对于个人开发者或者小团队开发者来说,做出一个简单易用的免费小工具(举个栗子),在里面加入一些广告,如果用的人多,也是可以带来一些可观的收入的 ...

  10. android download manager

    下载管理器,有个哥们写得很好了http://www.trinea.cn/android/android-downloadmanager/ 下载后台通知 下载管理器内容交互 最近对内部业务逻辑整理了一下 ...

随机推荐

  1. 参考Dubbo3官方文档做的学习笔记

    文章目录 概念与架构 2.1 服务发现 Dubbo3官方文档: https://dubbo.apache.org 服务:是 Dubbo 中的核心概念,一个服务代表一组 RPC 方法的集合,服务是面向用 ...

  2. grpc错误处理

    0.1.索引 https://waterflow.link/articles/1665938704477 我们都知道当发起http请求的时候,服务端会返回一些http状态码,不管是成功还是失败.客户端 ...

  3. Blog1:nchu-software-oop-2022-1~3

    (1) 前言 针对在完成三次作业过程中产生的问题进行总结与分析. 三次作业一共十五(9+3+3)道题目,其中前两次难度较为简单,第三次复杂程度飞跃式上涨. 其中,涉及到java语言中基本的输入输出语句 ...

  4. Oracle数据库的导出和导入

    本次数据库的导入导出操作是导出公司环境的Oracle数据库,再导入本地数据库,采用impdp和expdp命令进行导入导出操作. 一.导出52数据库 1.用system用户登录到数据库,查看是否有创建d ...

  5. 万字 HashMap 详解,基础(优雅)永不过时

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在上一篇文章里,我们聊到了散列表的整体设计思想,在后续几篇文章里,我们将以 Jav ...

  6. Flink SQL管理平台flink-streaming-platform-web安装搭建

    文章都在个人博客网站:https://www.ikeguang.com/ 同步,欢迎访问. 最近看到有人在用flink sql的页面管理平台,大致看了下,尝试安装使用,比原生的flink sql界面确 ...

  7. 【Java SE】Day04 IDEA、方法*

    一.IDEA 1.快捷键 Ctrl+Alt+L/Ctrl+Alt+Shift+4:格式化代码 Alt+Insert:自动生成代码 修改快捷键:File->Settings->keymap- ...

  8. 【每日一题】【递归实现、自下而上、优化】-2022年1月12日-NC68 跳台阶

    描述一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果). 数据范围:0 \leq n \leq 400≤n≤40要求:时间复杂度: ...

  9. jQuery事件与动态效果

    目录 一:阻止后续事件执行 1.推荐使用阻止事件 2.未使用 阻止后续事件执行 3.使用阻止后续事件执行 二:阻止事件冒泡 1.什么是事件冒泡? 2.未阻止事件冒泡 3.阻止事件冒泡 4.2.阻止冒泡 ...

  10. Ajax---EventLoop事件循环

    前言       JavaScript 是一门单线程执行的脚本语言.也就是说,同一时间只能做一件事情. JavaScript要运行在宿主环境中(浏览器,nodejs)下.浏览器内部有执行js代码的引擎 ...