首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gob打包递归定义的结构。

使用gob打包递归定义的结构。
EN

Stack Overflow用户
提问于 2014-11-12 14:24:46
回答 1查看 695关注 0票数 4

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

代码语言:javascript
复制
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将一个文件打包到一个文件中时,它会编译,但是我会看到堆栈溢出,我假设这是由递归引起的。在我的经验中,泡菜处理这样的事情没有喘息。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 14:34:36

到目前为止,具有递归值的encoding/gob不起作用

递归类型可以正常工作,但是递归值(带周期的数据)是有问题的。这种情况可能会改变。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26889287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档