декодирование данных generi c в Golang с gob, не может получить значение из интерфейса generi c - PullRequest
0 голосов
/ 02 мая 2020

Я хотел бы написать обобщенный 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 код для извлечения типа данных?

...