golang mongodb (mgo)插入或读取文档的字段值为空(nil)问题解决

dadream · · 3588 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

问题描述

当使用mgo操作mongodb时,遇到数据插入正常,但是在数据库查看时只能看到objectid被插入了;读取的时候,可以查询到记录,但是读入对象时,却所有的值均为0或者空的情况。

mongodb文档结构:

{
        "_id" : ObjectId("502fbbd6fec1300be858767e"),
        "lastName" : "Seba",
        "firstName" : "Jun",
        "inserted" : ISODate("2012-08-18T15:59:18.646Z")
}

golang结构:

type Person struct {
    _id         bson.ObjectId
    firstName  string
    middleName string
    lastName   string
    inserted   time.Time
}

 

原因

当跨包使用interface定义的字段时,只有一下两种情形,才拥有访问权限。(详见go语言规范

Exported identifiers

An identifier may be exported to permit access to it from another package. An identifier is exported if both:

  1. the first character of the identifier's name is a Unicode upper case letter (Unicode class "Lu"); and
  2. the identifier is declared in the package block or it is a field name or method name.

All other identifiers are not exported.

解决方案

将对象字段的首字母大写。如下所示:

type Person struct {
    Id         bson.ObjectId   "_id"
    FirstName  string          "firstName"
    MiddleName string          "middleName,omitempty"
    LastName   string          "lastName"
    Inserted   time.Time       "inserted"
}

 


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3588 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传