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

dadream · 2015-12-22 03:00:00 · 1541 次点击 · 预计阅读时间 1 分钟 · 大约1分钟之前 开始浏览    

这是一个创建于 2015-12-22 03:00:00 的文章,其中的信息可能已经有所发展或是发生改变。

问题描述

当使用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"
}

 

posted @ 2018-09-25 11:24  割肉机  阅读(2321)  评论(0编辑  收藏  举报