func (self convertor) Convert2Params(entity *store.MessageEntity) []interface{} { val := reflect.ValueOf(*entity) fvs := make([]interface{}, 0, len(self.columns)) for _, v := range self.columns { var fv interface{} if v.columnName == "body" { if entity.MsgType == protocol.CMD_STRING_MESSAGE { fv = []byte(entity.GetBody().(string)) } else if entity.MsgType == protocol.CMD_BYTES_MESSAGE { fv = entity.GetBody().([]byte) } else { log.ErrorLog("kite_store", "convertor|Convert2Params|UnSupport MESSAGE TYPE|%s\n", entity.MsgType) } } else { f := val.FieldByName(v.fieldName) // log.Debug("convertor|Convert2Params|%s|%s\n", v.fieldName, f) switch f.Kind() { case reflect.Ptr: header, ok := f.Interface().(*protocol.Header) if ok { //头部用Pb序列化 data, err := protocol.MarshalPbMessage(header) if err != nil { log.ErrorLog("kite_store", "convertor|Convert2Params|Marshal|HEAD|FAIL|%s|%s\n", err, f.Addr().Interface()) return nil } fv = data } else { log.ErrorLog("kite_store", "convertor|Convert2Params|Not protocol.Header PRT |FAIL|%s\n", f.Addr()) return nil } case reflect.Slice, reflect.Array: if f.Type().Elem().Kind() == reflect.String { data, err := json.Marshal(f.Interface()) if nil != err { log.ErrorLog("kite_store", "convertor|Convert2Params|Marshal|Slice|FAIL||%s\n", err) return nil } fv = string(data) } else { fv = f.Interface() } default: fv = f.Interface() } } fvs = append(fvs, &fv) } return fvs }