亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中持久化或編碼鏈接的數據結構?

如何在 Go 中持久化或編碼鏈接的數據結構?

Go
慕蓋茨4494581 2021-11-08 18:16:04
我的目標是擁有一個鏈接的數據結構,這是一個引用另一個結構的結構,等等,這樣我就可以將它編碼到我的文件系統中,并且只要我需要它,就對其進行解碼,這樣我就可以恢復整個鏈接結構,內容相同。例子:我有這些鏈接結構:type A struct {    b *B}type B struct {    c []C}type C interface{}我這樣初始化它們:var c0 C = "foo"var c1 C = "bar"var b *B = &B{}b.c = make([]C, 2)b.c[0] = c0b.c[1] = c1var a A = A{}a.b = bfmt.Println(a)// {$b_address}fmt.Println(a.b)// {[c0_address,c1_address]}fmt.Println(a.b.c[0])// foofmt.Println(a.b.c[1])// bar我想知道如何對 A 進行編碼,將它保存到一個文件中,這樣我就可以對其進行解碼,得到相同的結果。地址不重要,重要的是內容。我已經嘗試過,但encoding/gob沒有成功:// encodef, err := os.Create("data.gob")if err != nil {    fmt.Println(err)    os.Exit(1)}enc := gob.NewEncoder(f)enc.Encode(a)f.Close()// decodevar a1 Af, err = os.Open("data.gob")if err != nil {    fmt.Println(1, err)    os.Exit(1)}dec := gob.NewDecoder(f)dec.Decode(&a1)if err != nil {    fmt.Println(2, err)    os.Exit(1)}f.Close()fmt.Println(a1)// {<nil>}// expected {$b_address}完整示例:http : //play.golang.org/p/2vxHR9BzNy有沒有辦法在不公開字段的情況下做到這一點?是否有任何現有的解決方案,所以我不需要重新發明輪子?
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

有沒有辦法在不公開字段的情況下做到這一點?是否有任何現有的解決方案,所以我不需要重新發明輪子?

除非您愿意通過在編碼時將所有數據復制到具有導出字段的類型中并在解碼時將它們復制到類型中來做到這一點,否則不。

如果數據未導出,其他包就看不到它。這就是為什么它們被稱為未出口的。出于這個確切原因,像encoding/json、encoding/xml和 之類的包encoding/gob僅對導出的數據進行操作。


查看完整回答
反對 回復 2021-11-08
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號