Я хотел бы написать обобщенный c код декодирования для любого примитивного анализа данных типа от производителя.
Производитель кодирует данные, используя следующий код:
// GetBytesFromInterface is the function to convert a interface to bytes
func GetBytesFromInterface(data interface{}) ([]byte, error) {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
err := enc.Encode(data)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
In На стороне клиента, мне нужно запросить таблицу метаданных, чтобы получить тип данных, а затем выполнить декодирование соответствующим образом, ниже приведен мой код:
var decodedValueInterface interface{}
err = encodingParser.GetInterfaceFromBytes(encodedTime, &decodedValueInterface)
if err != nil {
fmt.Println("decodedValue can not be assigned: ", err)
}
fmt.Println("decodedValue is ", decodedValueInterface.(time.Time)) // here is just an example assuming the previous encoded data type is time.Time
В этом случае я уже получил сообщения об ошибке, либо интерфейс равен нулю или
gob: local interface type *interface {} can only be decoded from remote interface type; received concrete type Time
Кто-нибудь может мне помочь, почему и как я мог написать этот обобщенный c код для извлечения типа данных?