一个不可思议的问题,大婶们进来看看

weisd · · 2194 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
``` // 取redigo 连接 conn := models.Redis(setting.Conf.TimelineRedis).Get() defer conn.Close() for i, _ := range times { // redis key key := getTimelineKeyByCode(code, times[i]) // 接参数发送命令 err := conn.Send("HMGET", getTimelineArgs(key)...) if err != nil { return nil, err } } err := conn.Flush() if err != nil { return nil, err } list := make([]map[string]string, len(times)) // arr := make([]map[string]string, 0) for i, _ := range times { vals, err := redis.Strings(conn.Receive()) if err != nil { return nil, err } info := make(map[string]string) info = getTimelineVals(vals) // 没有 数据时 if len(vals[0]) == 0 { // if i == 0 { info = emptyInfo // } else { // info = arr[i-1] // } // } else { // info = getTimelineVals(vals) } info["date"] = times[i] log.Info("get %d %v", i, info["date"]) list[i] = info // arr = append(arr, info) } for j, in := range arr { log.Info("set %d %v", j, in["date"]) } ``` 说明 times := []string{} 是一个09:29~ 15:00 记录时间分钟数的字符串数组 redis.Strings(conn.Receive()) 前面用redigo 去redis取出了对应时间的数据 getTimelineVals() 把结果 拼成一个map[string]string 问题出在中间 // 没有 数据时 我判断当没有当取到的数据是空字符值,赋给一个默认值 只要在if 条件里加上 info = emptyInfo 就会得到如下结果 ,注释掉就正常 输出结果 ``` 2016/01/07 21:34:12 [I] get 231 14:50 2016/01/07 21:34:12 [I] get 232 14:51 2016/01/07 21:34:12 [I] get 233 14:52 2016/01/07 21:34:12 [I] get 234 14:53 2016/01/07 21:34:12 [I] get 235 14:54 2016/01/07 21:34:12 [I] get 236 14:55 2016/01/07 21:34:12 [I] get 237 14:56 2016/01/07 21:34:12 [I] get 238 14:57 2016/01/07 21:34:12 [I] get 239 14:58 2016/01/07 21:34:12 [I] get 240 14:59 2016/01/07 21:34:12 [I] get 241 15:00 2016/01/07 21:34:12 [I] set 0 15:00 2016/01/07 21:34:12 [I] set 1 15:00 2016/01/07 21:34:12 [I] set 2 15:00 2016/01/07 21:34:12 [I] set 3 15:00 2016/01/07 21:34:12 [I] set 4 15:00 2016/01/07 21:34:12 [I] set 5 15:00 2016/01/07 21:34:12 [I] set 6 15:00 2016/01/07 21:34:12 [I] set 7 15:00 2016/01/07 21:34:12 [I] set 8 15:00 2016/01/07 21:34:12 [I] set 9 15:00 ``` 最后打印输出的时间都变成最后一个元素的时间了!!! 部分代码 ``` var emptyInfo = map[string]string{ "price": "0", "high": "0", "low": "0", "close": "0", "vol": "0", "sum": "0", } var timelineFields = []string{ "price", "high", "low", "close", "vol", "sum", } func getTimelineVals(vals []string) map[string]string { info := map[string]string{} for i, _ := range timelineFields { info[timelineFields[i]] = vals[i] } return info } ```

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

2194 次点击  
加入收藏 微博
1 回复  |  直到 2016-01-07 15:51:42
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传