詳解Golang如何實(shí)現(xiàn)節(jié)假日不打擾用戶
1、場景
想象下以下場景,嘿嘿...!
一個(gè)iphone用戶,鬧鐘是可以按節(jié)假日不響的! 每日新聞機(jī)器人,節(jié)假日是可以不打擾我的! 我的業(yè)務(wù),節(jié)假日是可以...
2、思路
要實(shí)現(xiàn)識(shí)別節(jié)假日,大概有兩種方式:
1、自己收集國家法定節(jié)假日數(shù)據(jù),離線存儲(chǔ)
優(yōu)勢:離線簡單
劣勢:新一年要去更新,容易忘記,麻煩
2、調(diào)用第三方接口數(shù)據(jù)
優(yōu)勢:不需要我們操心數(shù)據(jù)本身
劣勢:有次數(shù)限制
本次介紹調(diào)用第三方接口的方式,用golang實(shí)現(xiàn)整個(gè)過程。
3、接口分析
分析了網(wǎng)上現(xiàn)有接口,發(fā)現(xiàn)juhe的api接口會(huì)比較合適
當(dāng)然也可以選擇您認(rèn)為合適的
分析:
請求詳情:
請求地址:http://apis.juhe.cn/fapig/calendar/day
請求參數(shù):date=2023-01-16&detail=&key=c6ff98d3**\*\***be4a35b2
請求方式:GETHeader:
Content-Type:application/x-www-form-urlencoded
返回內(nèi)容:
{ "reason":"success", "result":{ "date":"2023-01-16", "week":"星期一", "statusDesc":"工作日", "status":null }, "error_code":0 }
復(fù)制
4、golang實(shí)現(xiàn)
4.1、json2go小工具
這里我們利用下json轉(zhuǎn)golang struct的小工具,把接口返回的json轉(zhuǎn)成golang的代碼
http://tools.jb51.net/code/json2gostruct
4.2、代碼實(shí)現(xiàn)
package main import ( "encoding/json" "fmt" ) func main() { // 當(dāng)前日期 todayStr := time.Unix(time.Now().Unix(), 0).Format("2006-01-02") key := "xxxxxxx" //獲取,節(jié)假日信息查詢接口 https://dashboard.juhe.cn/data/index/my // 判斷當(dāng)前是否是節(jié)假日(周末也算節(jié)假日,除非是節(jié)假日后補(bǔ)班情況),節(jié)假日跳過 calendarJh := new(util.CalendarJH) isHolidays := calendarJh.IsHolidays(&todayStr, &key) if isHolidays { fmt.Printf("%v 是節(jié)假日,今天跳過!\n", todayStr) return } } // IsHolidays 是否是節(jié)假日(周末也算節(jié)假日,除非是節(jié)假日后補(bǔ)班情況) func (calendarJH *CalendarJH) IsHolidays(date *string, key *string) bool { // 默認(rèn)返回是節(jié)假日 result := true // 調(diào)用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("調(diào)用juhe接口出錯(cuò),默認(rèn)返回是節(jié)假日,錯(cuò)誤原因:%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 日歷數(shù)據(jù),來自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.當(dāng)status為1時(shí),表示節(jié)假日;2.當(dāng)status為2時(shí),表示工作日;3.當(dāng)status為null時(shí),如果week為周六或者周日,表示周末,否則表示工作日 Status interface{} `json:"status"` //當(dāng)天狀態(tài)標(biāo)識(shí),1:節(jié)假日,2:工作日,null:周末或工作日(可根據(jù)week進(jìn)行判斷,也可以直接根據(jù)statusDesc進(jìn)行判斷) }
以上就是詳解Golang如何實(shí)現(xiàn)節(jié)假日不打擾用戶的詳細(xì)內(nèi)容,更多關(guān)于Golang節(jié)假日不打擾用戶的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go并發(fā)編程實(shí)現(xiàn)數(shù)據(jù)競爭
本文主要介紹了Go并發(fā)編程實(shí)現(xiàn)數(shù)據(jù)競爭,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09詳解golang函數(shù)多返回值錯(cuò)誤處理與error類型
這篇文章主要為大家詳細(xì)介紹了golang中函數(shù)多返回值錯(cuò)誤處理與error類型的相關(guān)知識(shí),文中的示例代碼簡潔易懂,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)吧2023-10-10go?zero微服務(wù)實(shí)戰(zhàn)性能優(yōu)化極致秒殺
這篇文章主要為大家介紹了go-zero微服務(wù)實(shí)戰(zhàn)性能優(yōu)化極致秒殺功能實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Go語言使用templ實(shí)現(xiàn)編寫HTML用戶界面
templ是一個(gè)在 Go 中編寫 HTML 用戶界面的語言,使用 templ,我們可以創(chuàng)建可呈現(xiàn) HTML 片段的組件,下面就跟隨小編一起了解一下具體的實(shí)現(xiàn)方法吧2023-12-12