Attualmente sto salvando una struttura di file in modo che possa essere caricato e successivamente utilizzato mediante l'attuazione di goccia, come segue:Go: è sicuro usare il pacchetto gob per salvare i dati in un file per un uso successivo?
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
}
La mia preoccupazione è che Go potrebbe essere aggiornato in modo che cambia il modo in cui gobs di dati sono codificati e decodificati. Se ciò accadesse, la versione della mia app compilata con la nuova versione di Go non sarebbe in grado di caricare i file salvati dalla versione precedente. Questo sarebbe un grosso problema, ma non sono sicuro che si tratti di una preoccupazione realistica o meno.
Quindi qualcuno sa se posso considerare sicuro salvare e caricare dati di codifica gob come questo e aspettarsi che funzioni ancora quando Go viene aggiornato?
In caso contrario, quale sarebbe l'alternativa migliore? La mia funzione funzionerebbe ancora se avessi cambiato gob.NewDecoder
e gob.NewEncoder
in xml.NewDecoder
e xml.NewEncoder
? (Fa il codificatore XML codifica e decodifica le strutture nello stesso modo come goccia, cioè senza di me dover dire che cosa assomigliano?)
gocce sono state specificamente progettate per questo scopo. La promessa di stabilità Go va anche a coprire il formato di serializzazione usato dai gozzi. – fuz