Сохранение на диск после struct -> [] byte -> gob -> gzip -> IO -> gzip -> gob -> [] byte -> struct - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь сохранить структуры или, точнее, байты структуры на диске. У меня есть большие массивы байтов, которые я хочу сжать, сохранить на диске и восстановить позже. Данные ничего не значат для любого другого приложения, кроме моего.

Я могу закодировать с помощью Gob struct ([] bytes of) и сжать ее с помощью gzip. Я также могу распаковать полученные данные. Однако, когда я пытаюсь преобразовать эти [] байтовые данные обратно в структуру, у меня происходит сбой - и ошибка является странной sh единица ... Не ошибка, когда я распечатываю tmp из получаемой функции

tmp {A: B:0 C:0}

Тем не менее, структура, с которой я начинаю:

type SomeStruct struct {
    A string
    B int64
    C float64
}
var testStruct = SomeStruct{
    A: "james bond",
    B: 24,
    C: 1.234,
}

Это моя функция

func GobToStruct(binaryBytes io.Reader) (SomeStruct, error) {
    s, _ := ioutil.ReadAll(binaryBytes)
    fmt.Println("read decompressed bytes ", string(s))
    decoder := gob.NewDecoder(binaryBytes)
    var tmp SomeStruct
    if err := decoder.Decode(&tmp); err != nil {
        if err != io.EOF && err != io.ErrUnexpectedEOF {
            fmt.Println("gob failed ", err)
            return tmp, err
        }
    }
    fmt.Printf("tmp %+v\r\n", tmp)
    return tmp, nil
}

Что я делаю неправильно, чтобы не получить данные возвращаются после его удаления?

РЕДАКТИРОВАТЬ: Я добавил код, поскольку он теперь выполняется в этой сущности с тестовым файлом, который демонстрирует потерю данных после сжатия

...