使用mgo我无法存储任何有意义的数据。仅存储_id
type Person struct {
name string
age int
}
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
log.Fatal(err)
}
defer session.Close()
p := Person{"Joe", 50}
ppl := session.DB("rest").C("people")
ppl.Insert(p)
}
Mongo中的结果只是_id字段 - 没有“Joe”的迹象。
在Arch linux上使用go 1.1.2,MongoDB 2.4.6。
答案 0 :(得分:13)
type Person struct {
name string
age int
}
mgo包无法访问结构的未导出(小写)字段(即除了定义结构的包之外没有其他包)。你需要导出它们(首字母必须是大写字母),如下所示:
type Person struct {
Name string
Age int
}
如果您希望在DB中使用小写字母名称,则必须为它们提供结构标记,如下所示:
type Person struct {
Name string `bson:"name"`
Age int `bson:"age"`
}
Go中的名称与任何其他语言一样重要。他们甚至有 语义效果:包外的名称的可见性 由第一个字符是否为大写字母决定。 [...]
修改强>:
Gustavo Niemeyer(mgo
和bson
软件包的作者)在评论中指出,与json
软件包不同,bson
marshaller将小写所有struct字段名称提交到数据库,有效地使这个答案的最后一步变得多余。