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 加入
还未添加个人简介
评论