我主要使用 Python,但正在玩 Go。我寫了以下內(nèi)容來做一些在 python 中非常簡單的事情,我希望它也可以在 Go 中完成。package mainimport ( "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)}如您所見,有兩個(gè)自定義結(jié)構(gòu),每個(gè)都包含對另一個(gè)的引用,遞歸地。當(dāng)我嘗試使用 gob 將一個(gè)文件打包成一個(gè)文件時(shí),它會編譯,但出現(xiàn)堆棧溢出,我假設(shè)這是由遞歸引起的。根據(jù)我的經(jīng)驗(yàn),pickle 可以毫不費(fèi)力地處理這樣的事情。我究竟做錯(cuò)了什么?
- 1 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)
0/150
提交
取消