我尝试使用从 MongoDb 获取的内容填充结构的导出字段。 -使用labix.org/v2/mgo的数据库包。
mgo
使用 labix.org/v2/mgo/bson包来解码数据。但解码器将所有未导出的字段设置为零值。
有什么办法可以阻止这种行为吗?
工作示例:
package main
import (
"fmt"
"labix.org/v2/mgo/bson"
)
type Sub struct{ Int int }
type Player struct {
Name string
unexpInt int
unexpPoint *Sub
}
func main() {
dta,err := bson.Marshal(bson.M{"name": "ANisus"})
if err != nil {
panic(err)
}
p := &Player{unexpInt: 12, unexpPoint: &Sub{42}}
fmt.Printf("Before: %+v\n", p)
err = bson.Unmarshal(dta, p)
if err != nil {
panic(err)
}
fmt.Printf("After: %+v\n", p)
}
输出:
Before: &{Name: unexpInt:12 unexpPoint:0xf84005f500}
After: &{Name:ANisus unexpInt:0 unexpPoint:<nil>}
最佳答案
这是不可能的。如您所见in the source code ,struct
值在填充任何字段之前显式设置为零值。
没有选项可以禁用此行为。它可能是为了确保 Unmarshal()
的结果仅取决于 BSON 数据而不取决于任何先前状态。
关于mongodb - 防止 mgo/bson Unmarshal 清除未导出的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388210/