Я пытаюсь сохранить структуры или, точнее, байты структуры на диске. У меня есть большие массивы байтов, которые я хочу сжать, сохранить на диске и восстановить позже. Данные ничего не значат для любого другого приложения, кроме моего.
Я могу закодировать с помощью 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
}
Что я делаю неправильно, чтобы не получить данные возвращаются после его удаления?
РЕДАКТИРОВАТЬ: Я добавил код, поскольку он теперь выполняется в этой сущности с тестовым файлом, который демонстрирует потерю данных после сжатия