写点什么

Golang 使用过程中遇到的小技巧

作者:皮特王
  • 2022 年 8 月 23 日
    北京
  • 本文字数:1275 字

    阅读完需:约 4 分钟

Golang 使用过程中遇到的小技巧
  1. 启动一个定时任务,并一直运行

	import "github.com/robfig/cron/v3"    cron := cron.New()	cron.AddJob("@every 600s", job.TaskJob("job"))	cron.Start()	select {	}
复制代码
  1. 输出日志至文件

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)
复制代码
  1. 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{})
复制代码
  1. 时间转换 加 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")
复制代码


  1. 对切片进行分组

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}
复制代码
  1. 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}
复制代码
  1. 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 }}
复制代码
  1. 对 HTML 里面的内容进行反转义

import "html"
str1 := resp["htmlTag"]str := str1.(string)escaped := html.UnescapeString(str)
复制代码


发布于: 刚刚阅读数: 3
用户头像

皮特王

关注

还未添加个人签名 2016.01.06 加入

还未添加个人简介

评论

发布
暂无评论
Golang 使用过程中遇到的小技巧_皮特王_InfoQ写作社区