问题描述
当使用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:
- the first character of the identifier's name is a Unicode upper case letter (Unicode class "Lu"); and
- 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" }
有疑问加站长微信联系(非本文作者)