gpt4 book ai didi

go - 使用 gob 打包递归定义的结构体

转载 作者:IT王子 更新时间:2023-10-29 00:59:35 25 4
gpt4 key购买 nike

我主要使用 Python,但也在玩 Go。我写了下面的代码来做一些在 python 中非常简单的事情,我希望它也可以在 Go 中完成。

package main

import (
"bytes"
"encoding/gob"
"fmt"
"io/ioutil"
)

type Order struct {
Text string
User *User
}

type User struct {
Text string
Order *Order
}

func main() {
o := Order{}
u := User{}
o.Text = "order text"
u.Text = "user text"

// commenting this section prevents stack overflow
o.User = &u
u.Order = &o
fmt.Println("o.u.text:", o.User.Text, "u.o.text:", u.Order.Text)
// end section

m := new(bytes.Buffer)
enc := gob.NewEncoder(m)
enc.Encode(o)
err := ioutil.WriteFile("gob_data", m.Bytes(), 0600)
if err != nil {
panic(err)
}
fmt.Printf("just saved gob with %v\n", o)

n, err := ioutil.ReadFile("gob_data")
if err != nil {
fmt.Printf("cannot read file")
panic(err)
}
p := bytes.NewBuffer(n)
dec := gob.NewDecoder(p)
e := Order{}
err = dec.Decode(&e)
if err != nil {
fmt.Printf("cannot decode")
panic(err)
}
fmt.Printf("just read gob from file and it's showing: %v\n", e)

}

如您所见,有两个自定义结构,每个都包含对另一个递归的引用。当我尝试使用 gob 将一个打包到一个文件中时,它会编译,但我得到堆栈溢出,我假设这是由递归引起的。根据我的经验,pickle 可以毫不费力地处理这样的事情。我做错了什么?

最佳答案

截至目前,encoding/gobdoesn't work具有递归值:

Recursive types work fine, but recursive values (data with cycles) are problematic. This may change.

在此更改之前,您必须要么不使用循环数据,要么使用不同的序列化方法。

关于go - 使用 gob 打包递归定义的结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com