我正在嘗試編碼和解碼結構,我已經搜索了很多關于這個主題的很多問題通常是想要編碼基元或簡單結構的人。我想要的是編碼一個看起來像這樣的結構: Name string Id int file *os.File keys *ecdsa.PrivateKey }名稱和 ID 沒有問題,我可以使用 gob 或 json 編組對它們進行編碼。但是,當我想使用 gob 對文件進行編碼時gob.Register(os.File{}),由于文件結構中的字段是小寫,我會收到一個錯誤,指出文件沒有導出的字段。我會使用這樣的功能 buf := bytes.Buffer{} enc := gob.NewEncoder(&buf) gob.Register(big.Int{})... err := enc.Encode(&p) if err != nil { log.Fatal(err) } fmt.Println("uncompressed size (bytes): ", len(buf.Bytes())) return buf.Bytes()}我不確定在編碼函數中注冊是否正確,但是我必須注冊所有被引用的結構以用于我要編碼的一個特定結構,這似乎很奇怪。例如對于一個文件,我將不得不注冊大量的接口,這似乎不是正確的方法。有沒有一種簡單的方法來編碼和解碼具有更多復雜性的結構。如果我使用 json 編組來執行此操作,如果我使用指向另一個結構的指針,它將始終返回 nil。有沒有辦法獲得我想要的所有信息?
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
想象一下你的 struct ponts 到 /foo/bar/baz.txt 中的一個文件,然后序列化你的結構。您將它發送到另一臺計算機(可能在不同的操作系統中)并重新創建結構。你能指望什么?
如果在同一臺計算機上序列化、刪除文件(或更新內容)并重新創建結構會怎樣?
一種解決方案是存儲文件的內容。
另一種解決方案是存儲文件的路徑,當您反序列化結構時,您可以嘗試重新打開文件。您可以通過存儲內容、大小和其他元數據的哈希值來添加安全層,以檢查文件是否相同。
答案將指導您實現最佳實施
- 1 回答
- 0 關注
- 128 瀏覽
添加回答
舉報
0/150
提交
取消