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 @   割肉机  阅读(2369)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示