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语言中,结构体字段必须首字母大写才能被外部包(如mgobson包)访问和序列化。以下是修正后的代码:

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字段添加了完整的jsonbson标签

完整示例:

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就能正确映射嵌套结构体中的所有字段了。

回到顶部