Golang 使用过程中遇到的小技巧
作者:皮特王
- 2022 年 8 月 23 日 北京
本文字数:1275 字
阅读完需:约 4 分钟

启动一个定时任务,并一直运行
import "github.com/robfig/cron/v3" cron := cron.New() cron.AddJob("@every 600s", job.TaskJob("job")) cron.Start() select { }复制代码
输出日志至文件
import "log"
logFile, err := os.OpenFile("./log_file.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { fmt.Println("open log file failed, err:", err) return } log.SetOutput(logFile) log.SetFlags(log.Lshortfile | log.Lmicroseconds | log.Ldate)复制代码
JSON 字符串转 Map[string]interface{}
content, _ := ioutil.ReadAll(resp.Body) // content 为response返回的json字符串 responseMap := map[string]interface{}{} json.Unmarshal(content, &responseMap) dayBefore := responseMap["data"].(map[string]interface{})["dayBefore"].([]interface{}) realTime := responseMap["data"].(map[string]interface{})["realTime"].([]interface{})复制代码
时间转换 加 8 小时 和 不加 8 小时
// 加 8小时timeEnd, _ := time.Parse("2006-01-02T15:04:05.000+0000", dataMapDayBefore["timeEnd"].(string))timeStr := time.Unix(timeEnd.Unix(), 0).Format("2006-01-02 15:04:05")// 不加 8小时timeEnd, _ := time.ParseInLocation("2006-01-02T15:04:05.000+0000", dataMapDayBefore["timeEnd"].(string), time.Local)timeStr := time.Format("2006-01-02 15:04:05")复制代码
对切片进行分组
func splitSlice(keys []string) [][]string { sort.Strings(keys) returnData := make([][]string, 0) i := 0 var j int for { if i >= len(keys) { break } for j = i + 1; j < len(keys) && keys[i][:strings.LastIndex(keys[i], ":")] == keys[j][:strings.LastIndex(keys[j], ":")]; j++ { } returnData = append(returnData, keys[i:j]) i = j } return returnData}
复制代码
redigo 执行 SCAN 命令,并返回 slice
import "github.com/gomodule/redigo/redis"
func (c cacheRepo) Scan(key string) ([]string, error) { inter, _ := c.client.Do("SCAN", 0, "match", key, "count", 1000) va := inter.([]interface{}) va2 := va[1].([]interface{})
keys := make([]string, len(va2)) for i, v := range va2 { keys[i] = string(v.([]uint8)) } return keys, nil}复制代码
redigo 执行 LPush、LPop
func (c cacheRepo) LPush(key string, ttl time.Duration, values []interface{}) error { args := []interface{}{key} args = append(args, values...) _, error := c.client.Do("LPush", args...) c.client.Do("expire", key, ttl) return error}
func (c cacheRepo) Lpop(key string) (string, error) { inte, error := c.client.Do("LPOP", key) if error != nil || inte == nil { return "", error } else { token := string(inte.([]uint8)) return token, nil }}复制代码
对 HTML 里面的内容进行反转义
import "html"
str1 := resp["htmlTag"]str := str1.(string)escaped := html.UnescapeString(str)复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
版权声明: 本文为 InfoQ 作者【皮特王】的原创文章。
原文链接:【http://xie.infoq.cn/article/21aac13cf74a89d6caee8f20c】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
皮特王
关注
还未添加个人签名 2016.01.06 加入
还未添加个人简介









评论