Golang中Mgo库处理嵌套结构体时遇到问题
Golang中Mgo库处理嵌套结构体时遇到问题 你好,
我在嵌套结构体方面遇到了问题。我有一个类似这样的结构:
“_id” : ObjectId(“5b6982c0fa433a2278b6956d”), “niveau” : “-1”, “name” : { “nom” : “Toto”, “prenom” : “test” },
我这样定义我的结构体:
type Personne struct {
Id bson.ObjectId `bson:"_id"`
Niveau string `json:"niveau" bson:"niveau"`
Name struct {
nom string `json:"nom" bson:"nom"`
prenom string
} `json:"name" bson:"name"`
}
但无法获取所有值……我确信通过一个小调整就能解决,但我没有成功。
更多关于Golang中Mgo库处理嵌套结构体时遇到问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
要让从BSON解组的所有字段都能正常工作,这些字段需要被导出,也就是说字段名必须以大写字母开头。
更多关于Golang中Mgo库处理嵌套结构体时遇到问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
好的,原来如此……我之前没注意到这些字段。谢谢!
问题在于嵌套结构体中的字段没有正确导出。在Go语言中,结构体字段必须首字母大写才能被外部包(如mgo的bson包)访问和序列化。以下是修正后的代码:
type Personne struct {
ID bson.ObjectId `bson:"_id"`
Niveau string `json:"niveau" bson:"niveau"`
Name struct {
Nom string `json:"nom" bson:"nom"`
Prenom string `json:"prenom" bson:"prenom"`
} `json:"name" bson:"name"`
}
关键修改:
- 将
nom改为Nom - 将
prenom改为Prenom - 为
Prenom字段添加了完整的json和bson标签
完整示例:
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type Personne struct {
ID bson.ObjectId `bson:"_id"`
Niveau string `json:"niveau" bson:"niveau"`
Name struct {
Nom string `json:"nom" bson:"nom"`
Prenom string `json:"prenom" bson:"prenom"`
} `json:"name" bson:"name"`
}
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
c := session.DB("test").C("personnes")
// 查询示例
var result Personne
err = c.Find(bson.M{"_id": bson.ObjectIdHex("5b6982c0fa433a2278b6956d")}).One(&result)
if err != nil {
panic(err)
}
fmt.Printf("Nom: %s, Prenom: %s\n", result.Name.Nom, result.Name.Prenom)
}
这样修改后,mgo就能正确映射嵌套结构体中的所有字段了。

