第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Mongodb 通過解組獲得堆棧溢出

Mongodb 通過解組獲得堆棧溢出

Go
有只小跳蛙 2021-09-20 11:01:49
我想在 golang 中使用 mongodb 并編寫了一個示例應(yīng)用程序:package mainimport (    "fmt"    "labix.org/v2/mgo"    "labix.org/v2/mgo/bson"    "os")type Session struct {    Id   bson.ObjectId          `bson:"_id"`    Data map[string]interface{} `bson:"data"`}func (rcv *Session) SetBSON(raw bson.Raw) error {    return raw.Unmarshal(rcv)}type Authen struct {    Name  string `bson:"name"`    Email string `bson:"email"`}func main() {    uri := "mongodb://localhost/"    if uri == "" {        fmt.Println("no connection string provided")        os.Exit(1)    }    sess, err := mgo.Dial(uri)    if err != nil {        fmt.Printf("Can't connect to mongo, go error %v\n", err)        os.Exit(1)    }    defer sess.Close()    sess.SetSafe(&mgo.Safe{})    collection := sess.DB("test").C("sess")    a := &Authen{Name: "Cormier", Email: "cormier@example.com"}    s := &Session{}    s.Id = bson.NewObjectId()    s.Data = make(map[string]interface{})    s.Data["logged"] = a    err = collection.Insert(s)    if err != nil {        fmt.Printf("Can't insert document: %v\n", err)        os.Exit(1)    }    c := &Session{}    c.Id = bson.NewObjectId()    c.Data = make(map[string]interface{})    err = sess.DB("test").C("sess").Find(bson.M{}).One(c)    if err != nil {        fmt.Printf("got an error finding a doc %v\n")        os.Exit(1)    }}插入到 mongodb 就像一個魅力,但解組回參考我有以下恐慌:runtime: goroutine stack exceeds 1000000000-byte limitfatal error: stack overflowruntime stack:runtime.throw(0x6d84d9)        c:/go/src/runtime/panic.go:491 +0xadruntime.newstack()        c:/go/src/runtime/stack.c:784 +0x5efruntime.morestack()        c:/go/src/runtime/asm_amd64.s:324 +0x86我究竟做錯了什么?
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

這個邏輯引入了無限遞歸:


func (rcv *Session) SetBSON(raw bson.Raw) error {

    return raw.Unmarshal(rcv)

}

Session實現(xiàn)了Setter接口,這意味著它的解組是通過它的SetBSON方法發(fā)生的,這是通過要求bson包解組自己來實現(xiàn)的,這將通過調(diào)用它的SetBSON方法來實現(xiàn)。這永遠不會結(jié)束,直到堆棧空間結(jié)束。


當(dāng)然,解決方案是不Session通過僅要求bson包再次解組來實現(xiàn)自定義解組。


查看完整回答
反對 回復(fù) 2021-09-20
  • 1 回答
  • 0 關(guān)注
  • 290 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號