func (self *mysqlMessageCache) retrieveOnce(service, username string, since time.Time) (msgs []*rpc.MessageContainer, err error) { self.lock.RLock() defer self.lock.RUnlock() rows, err := self.getMultiMsgStmt.Query(service, username, since.Unix(), time.Now().Unix()) if err != nil { err = fmt.Errorf("Data base error: %v; query multi-msg error", err) return } defer rows.Close() msgs = make([]*rpc.MessageContainer, 0, 128) for rows.Next() { mc := new(rpc.MessageContainer) var data []byte var createTime int64 err = rows.Scan(&mc.Id, &mc.SenderService, &mc.Sender, &createTime, &data) if err != nil { return } mc.Message = new(rpc.Message) err = json.Unmarshal(data, mc.Message) if err != nil { return } mc.Birthday = time.Unix(createTime, 0) msgs = append(msgs, mc) } return }