詳解Golang如何實現節假日不打擾用戶
1、場景
想象下以下場景,嘿嘿…!
一個iphone用戶,鬧鐘是可以按節假日不響的! 每日新聞機器人,節假日是可以不打擾我的! 我的業務,節假日是可以…
2、思路
要實現識別節假日,大概有兩種方式:
1、自己收集國傢法定節假日數據,離線存儲
優勢:離線簡單
劣勢:新一年要去更新,容易忘記,麻煩
2、調用第三方接口數據
優勢:不需要我們操心數據本身
劣勢:有次數限制
本次介紹調用第三方接口的方式,用golang實現整個過程。
3、接口分析
分析瞭網上現有接口,發現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" //獲取,節假日信息查詢接口 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如何實現節假日不打擾用戶的詳細內容,更多關於Golang節假日不打擾用戶的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 解決Golang json序列化字符串時多瞭\的情況
- Golang語言JSON解碼函數Unmarshal的使用
- Golang 如何判斷數組某個元素是否存在(isset)
- Java常用類之日期相關類使用詳解
- Java使用Calendar類實現動態日歷