Golang如何实现节假日不打扰用户?

1、场景

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

一个iphone用户,闹钟是可以按节假日不响的!
每日新闻机器人,节假日是可以不打扰我的!
我的业务,节假日是可以...

2、思路

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

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

优势:离线简单

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

2、调用第三方接口数据

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

劣势:有次数限制

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

3、接口分析

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

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

juhe1.png

分析:

juhe2.png

请求详情:

请求地址: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的代码

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

image.png

4.2、代码实现

package main

import (
  "encoding/json"
  "fmt"
)

func main() {
  // 当前日期
  todayStr := time.Unix(time.Now().Unix(), 0).Format("2006-01-02")
  key := "xxxxxxx" //获取,节假日信息查询接口 http://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 := "http://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进行判断)
}

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

程序猿牧场公众号.png

周钦雄技术分享
本文转载于网络 如有侵权请联系删除

相关文章

  • 图解二进制,带你揭开二进制的神秘面纱!

    你好,这里是网络技术联盟站。二进制,多么熟悉的字眼,相信只要是学计算机的,二进制绝对是入门的第一节课必学的知识点。你肯定经常会听说“计算机底层数据传输就是通过二进制流”、“二进制就是0和1”等等说辞。对于二进制,更多的人还是停留在表面层的0和1,这个本身也没有错,不过既然今天写了这篇文章,那肯定是要从里到外扒个彻底。如果本文对您有帮助,欢迎收藏哦!让我们直接开始吧!TOC什么是二进制?二进制是由GottfriedLeibniz发明的以2为底的数字系统,是四种数字系统之一。四种数字系统分别是:二进制、八进制、十进制、十六进制。计算机系统中的所有数据都由二进制信息组成,二进制只有2个值:0和1。在布尔逻辑中,单个二进制数字只能表示True(1)或False(0),但是,可以使用多个二进制数字来表示大数并执行复杂的功能,任何整数都可以用二进制表示。在数字数据存储器、存储、处理和通信中,0和1值有时分别称为“低”和“高”。二进制也可用于描述已编译的软件程序,一旦程序被编译,它就会包含称为“机器代码”的二进制数据,可以由计算机的CPU执行。二进制是如何工作的?上面我们提到二进制1和0表示高低电平

  • ATT&CK框架在企业安全运营中的局限

    一、企业安全运营中的ATT&CKATT&CK框架是一个庞大的知识库,记载了各种各样的攻击战术和相关的具体技术方法。长期以来,很多组织都致力于将ATT&CK框架应用在企业安全运营流程中。几乎所有实际场景中的攻击行为都能在这个框架下得到标准化的记录或解释,这使得我们可以在诸多评估/规划/情报领域使用这个框架。但是,目前ATT&CK在安全运营实战中的表现,尤其是在自动化/智能化安全运营中的表现并不令人满意。不论是攻击检测、研判、溯源、还是处置响应,鲜有听闻从根本上基于ATT&CK框架实现的系统在攻防实战中发挥关键作用的案例。接下来,我们将在攻击检测和跟踪溯源两个阶段分别讨论这个问题。二、攻击检测攻击检测能力无疑是目前企业安全运营的短板。近年来的众多红蓝对抗活动足以证明,虽然很多预防措施的不完善是责无旁贷的,但在大多数安全事件报告中,防守方“未能(及时)发现攻击”的问题都不曾缺席。如果要将ATT&CK框架应用于攻击检测,主要思路有二。首先,ATT&CK框架的每个技术都有一个阐述攻击检测方法的Detection章节,我们可以直接遵循框架的指

  • C++核心准则​NL.16:使用常规的类成员声明顺序

    NL.16:UseaconventionalclassmemberdeclarationorderNL.16:使用常规的类成员声明顺序Reason(原因)Aconventionalorderofmembersimprovesreadability.常规的成员顺序可以提高可读性。Whendeclaringaclassusethefollowingorder当声明一个类时,使用以下顺序types:classes,enums,andaliases(using) 类型:类,枚举和别名(using) constructors,assignments,destructor 构造函数,赋值,析构函数 functions 成员函数data 数据成员Usethepublicbeforeprotectedbeforeprivateorder.使用公有成员处于保护成员之前,保护成员处于私有成员之前的顺序。Thisisarecommendationforwhenyouhavenoconstraintsorbetterideas.Thisrulewasaddedaftermanyrequestsforguida

  • 开放世界下的混合域适应 ——面向真实自然场景下的全新迁移学习范式

    ZiweiLiu*,ZhongqiMiao*,XingangPan,XiaohangZhan,DahuaLin,StellaX.Yu,BoqingGong,OpenCompoundDomainAdaptation,CVPR2020Oral.(港中文&伯克利&谷歌)1引言域适应(domainadaptation)旨在将给定训练集上得到的模型迁移到一个数据分布不同的测试集上。这种分布差异现阶段一般用离散的数据域来模拟,比如从自动驾驶中晴天采集的数据迁移到雨天采集的数据。但是,这种已知且明确区分(aknownandcleardistinction)的数据域在实际应用中很难被定义。例如,真实自然场景下的自动驾驶数据往往来自于混合(mixed)、连续变化(continuous)、甚至完全未知(unseen)的天气情况。因此,传统域适应中利用离散数据域来模拟的方式变得不再适用于真实场景。2问题为了解决真实自然场景下的迁移学习问题,我们提出开放混合域适应(OpenCompoundDomainAdaptation,OCDA),一种连续(continuous)且更加实际(morereal

  • Redis安全基线检查

    禁止使用root用户启动|访问控制描述 使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。rediscrackit漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的 加固建议 使用root切换到redis用户启动服务:useradd-s/sbin/nolog-Mredis sudo-uredis/<redis-server-path>/redis-server/<configpath>/redis.conf复制操作时建议做好记录或备份禁止监听在公网|访问控制描述 Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。 加固建议 在redis的配置文件redis.conf中配置如下:bind127.0.0.1或者内网IP,然后重启redis操作时建议做好记录或备份打开保护模式|访问控制描述 redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。 加固建议

  • 中间人攻击之Bettercap工具使用

    注:本文仅供参考学习0x01Bettercap简介 0x02Bettercap模块与基本命令 0x03Bettercap嗅探模块 0x04Bettercaparp欺骗 0x05Bettercap注入js 0x06Bettercap加载脚本 0x07Bettercapdns欺骗 0x08Bettercaphttps嗅探 复制0x01Bettercap简介Bettercap是一个非常强大、灵活可移植的中间人攻击框架,它具有跨平台、轻量级以及模块化等优点,在渗透测试过程中能够非常好的进行中间人测试。在KaliLinux上可以通过aptinstallbettercap直接安装。使用Bettercap时并不需要Cain和Ettercap一样手动扫描内网主机,在打开时会选择正在上网网卡自动完成扫描任务并实时发现网络中新接入的设备。 新版的界面也十分友好,跟msf有点相似,也是设置变量然后运行。 复制0x02Bettercap模块与基本命令在启用Bettercap时可以通过-h获取帮助信息 复制查看模块help runnning表示正在运行 notrunning表示未启用 复制模块介绍 复制net.

  • kubeflow系列(二):kubeflow组件介绍

    为了对kubeflow有个更直观深入的了解,对kubeflow的各组件进行简单的介绍,先从机器学习任务来看kubeflow的的实现。机器学习任务工程化实现流程一个建模任务下来主要可以分为四大块任务业务理解(BusinessUnderstanding)数据获取及数据理解(DataAcquistition)特征处理(FeatureEngineering)、建模与模型训练(ModelTraining)、模型评估(ModelEvaluation)模型部署(Deployment),提供模型服务一个机器学习任务从开始到结束主要分为了四大任务,Kubeflow的各项功能可以说就是围绕这四项任务构建的。kubeflowkubeflow最开始基于tf-operator,后来随着项目发展最后变成一个基于云原生构建的机器学习任务工具大集合。从数据采集,验证,到模型训练和服务发布,几乎所有步骤的小组件Kubeflow都提供解决方案的组件:kubeflow特点:基于k8s,具有云原生的特性:弹性伸缩、高可用、DevOps等集成大量机器学习所用到的工具结构kubeflow的完整结构可以看他的kustomize安装

  • MongoDB学习红宝书 - MongoDB官网使用指南

    无论你是MongoDB的使用者、爱好者、初学者还是路人甲,有一个学习与进修的资源宝藏是千万不可浪费的,那就是MongoDB官方网站。进入网站首页后,会看到顶端简洁明了的导航栏:产品:包含云服务Atlas、MongoDBStich、Server、Compass,Charts以及最新推出的Atlas数据湖等MongoDB所有产品解决方案:包含企业战略的创新方法:遗留系统现代化以及数据中台等;以及应用场景:如单一实视图、移动终端、物联网、实时分析、个性化、内容管理、编目等客户:包含各行业如政府、零售、高科技、金融服务的客户成功案例资源中心:包含博客、网络研讨会、PPT、白皮书、TrustCenter、活动、大学、文档、合作伙伴……学习:包含百科全书、MongoDBUniversity,这里是从小白进阶到大咖的必经途径MongoDB知多少:包含从这里开始、架构、可扩展性、基础资源、发展历程 MongoDB官网首页-顶端导航栏MongoDB官网首页-底部导航栏大咖进阶第一步:如果你不够了解MongoDB,请从顶端导航栏“MongoDB知多少”,开始进阶之旅。在这里你可以找到丰富的话题:微服务、

  • 【报告】领英发布:全球AI领域人才报告

    《全球AI领域人才报告》。报告显示,作为当下热门的“投资风口”,AI领域其实早已拥有深厚的技术积淀,是一片拥有“高度文明的新大陆”——全球AI领域拥有十年以上从业经验的人才占比高达65.4%。报告还指出,AI领域的华人技术力量也不容小觑——全球华人AI人才数量达14万,而美国的华人AI人才数量是中国当前AI人才总数的1.4倍。这一潜力巨大的技术人才群体,或将成为未来中国人工智能技术突破的一股关键力量。

  • 十分钟带你上手fabric

    vfabric是什么?vFabric的安装 v常用的fabric接口 vFabric的简单使用 v如何进行多机线上部署脚本中断 尽可能使用withsetting(warn_only=True): run(‘command’) 远程机器服务无法启动【tomcat为例】 因为tomcat的启动,其实是用&把进程放到后台的,所以当session结束的时候,会退出所有后台任务,而set-m让所有命令都打开一个session run('set-m;/usr/local/tomcat/bin/startup.sh') 众多小文件同步到远程机器上去【别再使用put】 推荐使用rsync_project这个api 执行其他脚本或者命令后最好加上sleep 以防止Fabric过早地关闭与远程PC连接的session,而导致执行任务失败,特别是tomcat这块一定要特别注意

  • 新手不知道的,前端关于html5入门学习顺序

    现在html5移动端非常的火,很多小伙伴想学习又不知道从哪开端学起,今天就分享一下前html5该怎么入门。首先还是给大家推荐一个学习氛围很好的裙,我自己的,想要一起学习web前端的可以加裙六一四三一五六五七,有各种资料和开发工具包满足大家,每天更新最新行情1、css3新增挑选器结构挑选器::nth-child(n)父元素下的第n个子元素:nth-child(odd)奇数子元素(同nth-child(2n-1)):nth-child(even)偶数子元素(同nth-child(2n)):nth-child(an+b)公式:nth-last-child(n)倒数第n个子元素:nth-of-type(n)父元素下的第n个指定类型的子元素:nth-last-of-type父元素下的数第n个指定类型的子元素:first-child挑选父元素下的第一个子元素:last-child挑选父元素下的最终一个子元素:only-child挑选父元素下仅有的子元素:only-of-type挑选父元素下指定类型的仅有子元素:root挑选文档的根目录,回来html特点挑选器::E[attr]特点名,不确定详细特点

  • Python数据处理(6)-pandas的数据结构

    pandas是本系列后续内容所需要的第三方库,它是基于之前介绍的NumPy构建的,使得Python可以更加简单、方便地完成一系列数据分析工作。首先,使用下面的pandas导入约定:pd是pandas约定俗成的缩写,Series和DataFrame是pandas中两个最重要的数据结构。我们将简单介绍二者的用法,作为pandas的入门。1.SeriesSeries是一种类似于一维数组的对象,它由一组数据(NumPy数组)以及相对应的一组数组标签(即索引)构成。其中,左边是索引部分,右边是数据部分。由于创建Series时没有给定索引参数,于是默认索引为0到N-1。通过Series的values和index属性,可以获取数据数组和索引数组。我们可以通过传入索引参数对数据进行标记,然后就可以通过索引获取对应的数据点,这一点类似于字典数据结构。和NumPy中介绍的很多操作类似,Series同样可以进行布尔值索引和矢量化操作。2.DataFrameDataFrame是Pandas数据分析中最常用和最重要的数据结构,它是一个表格型的数据结构,这一点与Excel表格十分类似,每个数据点既有行索引又有列索

  • OpenSSL安全套接字密码库命令

    [TOC]0x00前言简述OpenSSL命令有两种运行模式交互模式和批处理:输入openssl回车进入交互模式输入带命令选项的openssl进入批处理模式OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序,OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的;功能说明:处理数字证书:可以用作证书颁发机构(CertificateAuthority即CA)。进行证书、公钥、私钥的管理0x01Openssl命令Syntax&Param基础语法: openssl[Standard]复制基础参数: #Standardcommands(标准命令) asn1parsecacipherscms crlcrl2pkcs7dgstdh dhparam(dh加密方式)dsadsaparam(dsa加密方式)ec ecparamenc(加密)engineerrstr gendhgendsagenpkeygenrsa(生成rsa密匙) nseqocsppasswdpkcs12 pkcs7pkcs8pkeypkeyparam pkeyutlprimeran

  • 2022.07.03软件更新公告

    原创软件区升级ComicEnhancerPro

  • 导入网络表

     网表的生成,首先要重新编辑元件编号,先选择dsn文件,然后选择Tools->Annotate。scope要选择整个工程,entire。action中要先选择resetpartreferencesto"?"来取消所 有的编号,然后再选择无条件的索引更行,Unconditionalreferenceupdate来进行全部重新跟新。     然后进行DRC检查,先选择dsn文件,然后再选择Tools->DesignRulesCheck。DRC只能检查出原理图的连接问题,和元器件的属性等。     接着再来查阅器件的封装,在确定器件封装的时候,我有一点点建议,虽然稍微麻烦一点,但是却能够减小出问题的概率。在DSN文件中,选择Edit-Browse-part或者net或者offpage  等。 1.首先要设置好封装的路径。 2.选择菜单file-import-logic。 3.在弹出的对话框里选择DesignentryCIS(capture),importdire

  • go语言学习笔记1 Go开发环境

    什么是Go?Go是一门并发支持、垃圾回收的编译型系统编程语言,旨在创造一门具有在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡的一门编程语言。 Go的主要特点有哪些?*类型安全和内存安全*以非常直观和极低代价的方案实现高并发*高效的垃圾回收机制*快速编译(同时解决C语言中头文件太多的问题:去除掉实际上没有用的头文件,如果头文件没有用会跳出编译异常)*为多核计算机提供性能提升的方案*UTF-8编码支持 Go存在的价值是什么?Go在谷歌:以软件工程为目的的语言设计http://blog.jobbole.com/36480/ Go是记事本编程吗?包括VIM、IDEA、SublimeText、Eclipse等IDE均已支持 Go目前有多少实际应用和资源?*全球最大视频网站Youtube(谷歌)*七牛云存储以及旗下网盘服务(Q盘)*爱好者开发的Go论坛及博客*已在服务端使用Go开发的著名企业:谷歌、盛大、七牛、360*其他开源项目,可以在这三个网站上找到:go-wiki,GoDoc,GoLanguageResources Go发展成熟了吗?作为一门2009年才正式发布的编程语言,Go是

  • NDK jni 加载静态库

    加载静态库到android,静态库的提供方式有2种,a.通过源文件来编译静态库b.加载已经编译好的静态库首先我们来看,通过源文件来编译静态库,工程目录如下第一步:我们来看我们的jni目录,目录下包含以下4个文件Android.mk ---编译文件first.c,first.h---外部需要引用的文件second.c ----我们的jni转换文件首先我们简单的看下源码#include"first.h" intfirst(intx,inty) { returnx+y; }复制first.c里面简单的定义了一个加法的方法,然后申明了头文件复制 复制 复制 .csharpcode,.csharpcodepre{font-size:small;color:rgba(0,0,0,1);font-family:consolas,"CourierNew",courier,monospace;background-color:rgba(255,255,255,1)} .csharpcodepre{margin:0} .csharpcode.rem{color:r

  • 8-24

      徐峥黄渤宁浩这波人的电影,配角都有自己的人生,有自己是人生观,只是恰巧的路过了主角的故事,而开心麻花的配角都是为喜剧冲突对比造出来的,没有独立的人生观,何止配角没有自己的人生,主角也没有自己的人生。   这是一个编剧思路问题,张艺谋拍《金陵十三钗》的时候,请贝尔来当男一号,看完剧本贝尔问了一串问题,诸如这个角色来中国之前是干什么?有没有老婆孩子?之前有过什么经历?问的张艺谋严歌苓一愣一愣的,赶紧补人物小传。高明的作者是很注重配角的真实性或者说合理性,比如《寻找无双》是个荒诞喜剧,但是里面的王安老爹,像极了北京胡同特别“事儿”的大妈大爷,虽然戏剧是荒诞的,但是有一种角色真实,让你相信这样的人在世界上是存在的。   徐峥在《疯狂的赛车》里的角色就很扎实,虽然现实中没有“墓地中的cbd”“十八相送”,但是现实中真有这样的人,做的是不靠谱的事而且看人下菜但是同时又爱岗敬业,简单的说,很尊重钱的人,会一本正经的指挥下属“严肃点,声音大点,哭出声来”等等。

  • java.lang.NoClassDefFoundError解决方法

    这是一个运行时异常,表示没有找到对应的class文件。。 在网上找方法找了半天,,都没解决。 结果看到有人说把javabuildpath中的orderandexport中所有jar包都选上对钩,解决了。 原来的测试时只是把报错的那个jar包选上了对钩,结果没有解决。  

  • 格兰杰因果 Granger causality

    格兰杰因果关系(Grangercausality )是基于预测的因果关系统计概念。根据格兰杰因果关系,如果信号X1“格兰杰Causes”(或“G-Causes”)信号X2,则X1的过去值应该包含有助于预测X2的信息,并且超过仅包含在X2的过去值中的信息。其数学公式基于随机过程的线性回归模型(Granger1969)。当然也有对非线性情况的扩展,但是这些扩展在实践中通常更难以应用。 格兰杰因果关系(或“G因果关系”)于20世纪60年代发展起来,自那以来,已广泛应用于经济学。然而,仅仅在过去的几年里,神经科学的应用开始流行起来。   个人解释byCliveGranger 关于如何定义因果关系的话题让哲学家们忙了两千多年,但是现在都还没有得到解决。这是一个令人深思的问题,有许多种答案试图解释因果关系,但都并不能使所有人信服,它仍然具有一定的挑战性。研究者希望,如果他们认为已经找到了一个“原因”,这应该是一个深刻的基本关系,并且拥有potential。 在20世纪60年代早期,我(CliveGranger)正在考虑一对明显相互关联的随机过程,我想知道这种关系是否可以分解为一

  • 第二章IPC——IPC与开启多进程

    问题 一、IPC ①、什么是IPC ②、为什么要有IPC 二、多进程 ①、如何开启多进程 ②、系统如何创建多进程 三、多进程引发的问题   问:私有进程(利用":+进程名")能否共享数据? 只能够共享data信息和组件信息。。。不能共享数据。  

相关推荐

推荐阅读