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

问题描述

当使用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"
}
上一篇:PHP学习笔记十二【数组排序】


下一篇:搭建SSM(Spring+SpringMVC+Mybatis)