詳解Golang如何實現節(jié)假日不打擾用戶
1、場景
想象下以下場景,嘿嘿...!
一個iphone用戶,鬧鐘是可以按節(jié)假日不響的! 每日新聞機器人,節(jié)假日是可以不打擾我的! 我的業(yè)務,節(jié)假日是可以...
2、思路
要實現識別節(jié)假日,大概有兩種方式:
1、自己收集國家法定節(jié)假日數據,離線存儲
優(yōu)勢:離線簡單
劣勢:新一年要去更新,容易忘記,麻煩
2、調用第三方接口數據
優(yōu)勢:不需要我們操心數據本身
劣勢:有次數限制
本次介紹調用第三方接口的方式,用golang實現整個過程。
3、接口分析
分析了網上現有接口,發(fā)現juhe的api接口會比較合適
當然也可以選擇您認為合適的
分析:

請求詳情:
請求地址:http://apis.juhe.cn/fapig/calendar/day
請求參數:date=2023-01-16&detail=&key=c6ff98d3**\*\***be4a35b2
請求方式:GETHeader:
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://tools.jb51.net/code/json2gostruct

4.2、代碼實現
package main
import (
"encoding/json"
"fmt"
)
func main() {
// 當前日期
todayStr := time.Unix(time.Now().Unix(), 0).Format("2006-01-02")
key := "xxxxxxx" //獲取,節(jié)假日信息查詢接口 https://dashboard.juhe.cn/data/index/my
// 判斷當前是否是節(jié)假日(周末也算節(jié)假日,除非是節(jié)假日后補班情況),節(jié)假日跳過
calendarJh := new(util.CalendarJH)
isHolidays := calendarJh.IsHolidays(&todayStr, &key)
if isHolidays {
fmt.Printf("%v 是節(jié)假日,今天跳過!\n", todayStr)
return
}
}
// IsHolidays 是否是節(jié)假日(周末也算節(jié)假日,除非是節(jié)假日后補班情況)
func (calendarJH *CalendarJH) IsHolidays(date *string, key *string) bool {
// 默認返回是節(jié)假日
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接口出錯,默認返回是節(jié)假日,錯誤原因:%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"` //狀態(tài)描述,節(jié)假日/工作日/周末。1.當status為1時,表示節(jié)假日;2.當status為2時,表示工作日;3.當status為null時,如果week為周六或者周日,表示周末,否則表示工作日
Status interface{} `json:"status"` //當天狀態(tài)標識,1:節(jié)假日,2:工作日,null:周末或工作日(可根據week進行判斷,也可以直接根據statusDesc進行判斷)
}以上就是詳解Golang如何實現節(jié)假日不打擾用戶的詳細內容,更多關于Golang節(jié)假日不打擾用戶的資料請關注腳本之家其它相關文章!
相關文章
go?zero微服務實戰(zhàn)性能優(yōu)化極致秒殺
這篇文章主要為大家介紹了go-zero微服務實戰(zhàn)性能優(yōu)化極致秒殺功能實現,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07

