Go:使用gob软件包将数据保存到文件以供以后使用是否安全?

Go:使用gob软件包将数据保存到文件以供以后使用是否安全?,go,Go,我目前正在将一个结构保存到文件中,以便可以加载它,并在以后通过实现gob使用它,如下所示: func (t *Object) Load(filename string) error { fi, err := os.Open(filename) if err !=nil { return err } defer fi.Close() fz, err := gzip.NewReader(fi) if err !=nil {

我目前正在将一个结构保存到文件中,以便可以加载它,并在以后通过实现gob使用它,如下所示:

func (t *Object) Load(filename string) error {

    fi, err := os.Open(filename)
    if err !=nil {
        return err
    }
    defer fi.Close()

    fz, err := gzip.NewReader(fi)
    if err !=nil {
        return err
    }
    defer fz.Close()

    decoder := gob.NewDecoder(fz)
    err = decoder.Decode(&t)
    if err !=nil {
        return err
    }

    return nil
}

func (t *Object) Save(filename string) error {

    fi, err := os.Create(filename)
    if err !=nil {
        return err
    }
    defer fi.Close()

    fz := gzip.NewWriter(fi)
    defer fz.Close()

    encoder := gob.NewEncoder(fz)
    err = encoder.Encode(t)
    if err !=nil {
        return err
    }

    return nil
}
我担心Go的更新可能会改变大量数据的编码和解码方式。如果发生这种情况,则使用新版Go编译的my app版本将无法加载从以前版本保存的文件。这将是一个重大问题,但我不确定这是否是一个现实的问题

所以,有人知道我是否可以认为保存和加载像这样的GOB编码数据是安全的,并希望在GO更新时它仍然能工作吗? 如果没有,最好的选择是什么?如果我将
gob.NewDecoder
gob.NewEncoder
更改为
xml.NewDecoder
xml.NewEncoder
,我的函数还会工作吗?(XML编码器是否以与gob相同的方式对结构进行编码和解码,即不必告诉它它们的外观?

确实提到:

注意:由于GOB可以永久存储,因此良好的设计可以保证
GobEncoder
使用的编码随着软件的发展而稳定。
例如,
GobEncode
在编码中包含版本号可能是有意义的

但这适用于定制编码器

对于随go提供的版本,不会对任何go 1点版本进行:向后不兼容的更改

这意味着gob应该继续像现在这样工作

对于像“”这样的项目,存在一个不同且强大的解决方案:

高性能和功能丰富的惯用Go库为不同的序列化格式提供编码/解码支持

支持的序列化格式包括:

  • msgpack
  • binc

但是,除非您需要这些特定的格式,否则gob就足够了。

gob是专门为此设计的。Go稳定性承诺还包括gobs使用的序列化格式。