空或不需要的结构字段

2024-05-01

我有两个结构体,代表将插入到 mongodb 数据库中的模型。一个结构(投资)将另一个结构(集团)作为其字段之一。

type Group struct {
    Base
    Name string `json:"name" bson"name"`
}

type Investment struct {
    Base
    Symbol string `json:"symbol" bson:"symbol" binding:"required"`
    Group  Group  `json:"group" bson:"group"`
    Fields bson.M `json:"fields" bson:"fields"`
}

我遇到的问题是,在投资模型中,不需要组。如果没有组,我认为最好不要将其插入到数据库中。在 Go 中处理这样的数据库模型的最佳方法是什么?


tl;dr: Use ,omitempty,如果您需要担心之间的差异零值 http://golang.org/ref/spec#The_zero_value和空/未指定,执行 GitHub API 的操作并使用指针 https://willnorris.com/2014/05/go-rest-apis-and-pointers.


Both json and bson支持,omitempty标签。对于 json,“空值为 false、0、任何零指针或接口值,以及任何数组、切片、映射、或字符串长度为零”(json 文档 http://golang.org/pkg/encoding/json/)。对于bson来说,,omitempty表示“仅包含该字段(如果该字段未设置为类型的零值或空切片或映射)”,并且零值 http://golang.org/ref/spec#The_zero_value包括空字符串和 nil 指针(bson 文档 http://godoc.org/labix.org/v2/mgo/bson).

因此,如果您确实需要一个 Group 结构,您可以放置​​一个*Group相反,当指针为零时,它不会被存储。如果Investment只需要持有团体的name,就更简单了:""因为组名称会阻止存储组密钥。

bson默认情况下已使用小写字段名称,因此您可以在匹配时从结构标记中省略该字段名称。json默认为大写名称,因此如果需要小写,请在标签中指定小写名称。

所以,最好的情况,也许你可以使用:

type Investment struct {
    Base
    Symbol string `json:"symbol" binding:"required"`
    Group string  `json:"group,omitempty" bson:",omitempty"`
    Fields bson.M `json:"fields"`
}

如果您遇到过类型零值(“”、0、false 等)与“未指定”不同的字段,您可以执行 GitHub API 的操作并将指针放入您的结构中 https://willnorris.com/2014/05/go-rest-apis-and-pointers——本质上是一个扩展*Group trick.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

空或不需要的结构字段 的相关文章

随机推荐

  • 如何将 DataTable/DataSet 转换为 ObjectDataSource

    我有一个与 ObjectDataSource 绑定的 GridView 我有一个返回数据表的方法 如何将 DataTable 提供给 ObjectDataSource 以便在代码中更新 GridView Example protected
  • 如何从 JSF 表单中进行 Spring Security 身份验证

    我创建了一个简单的 JSF 登录页面 并尝试将其与 spring security 集成 这是来自的表单元素登录 xhtml
  • Python Popen grep

    我希望 Popen 执行 grep i line buffered grave data txt 当从 shell 运行时 这给了我想要的结果 如果我开始 在我测试的同一目录中grep 一个 python repl 并遵循文档中的说明 ht
  • Linux 上的 Chrome - 查询浏览器以查看打开了哪些选项卡?

    我在 Ubuntu Linux 上运行 Chromium 开源 chrome 版本 我可以编写一个程序来查看我打开了哪些选项卡吗 我想编写一个程序来监控我在事情上花费了多少时间 是否有命令行程序 某种调用 chromium browser
  • postgres 中简单更新查询出现死锁

    我正在使用 postgres 9 1 并在过度执行简单更新方法时出现死锁异常 根据日志 死锁是由于同时执行两个相同的更新而发生的 更新 public vm action info 设置last on demand task id 1 ver
  • php.ini 更改,但在 Ubuntu 上无效

    我想更改 PHP 上传文件大小的限制 这是我的输出的一些信息phpinfo https www php net manual en function phpinfo php Configuration File php ini Path e
  • useReducer 未同步更新状态的问题

    根据React docs 当你有复杂的情况时 useReducer 通常比 useState 更好 涉及多个子值或下一个状态时的状态逻辑 取决于前一个 1 有人可以解释一下为什么吗useReducer不是同步更新状态吗 const redu
  • 显示“另存为”对话框并将文本区域内选定文本的内容保存到客户端 PC 上的文件中[重复]

    这个问题在这里已经有答案了 可能的重复 仅使用 Javascript 将文本区域内容下载为文件 无服务器端 https stackoverflow com questions 609530 download textarea content
  • 在 WKWebView 中加载 Microsoft Office 文档

    我已经使用 UIWebView 在我的应用程序中显示 Microsoft Office 文档 Word PowerPoint Excel 一段时间了 但 Apple 最近已弃用 UIWebView 类 我正在尝试切换到 WKWebView
  • 管道破裂错误

    我在 FTP 实现中的打开的数据套接字上使用 write 来发送文件 但写入一些数据后 它会挂起一段时间 之后它会返回 损坏的管道 错误 对此的任何帮助将不胜感激 我的进程从一个缓冲区读取数据包并写入套接字 我在增加带宽时注意到了这个问题
  • Safari 不设置 cookie,但 Chrome 和 Firefox 会设置

    我正在将请求从本地主机发送到第三方服务器以使用 REST API 获取数据 后端使用cookies JSESSIONID 来了解是否发送数据 在 Chrome 中一切正常 我可以在 Chrome 浏览器的 应用程序 选项卡中看到 Cooki
  • Bootstrap 与 Haml 和 Rails 一起崩溃

    我对 Rails 编程等很陌生 所以如果这是非常基本的 我很抱歉 我正在尝试让 twitter bootstrap crash js 在我的网络应用程序上工作 我试图遵循这里的结构http getbootstrap com javascri
  • 如何在 Tensorflow 中计算 R^2

    我正在尝试在 Tensorflow 中进行回归 我不确定我计算 R 2 是否正确 因为 Tensorflow 给出的答案与sklearn metrics r2 score有人可以看看我下面的代码 让我知道我是否正确地实现了图中的方程 谢谢
  • 如何调试没有错误消息的错误?

    如何调试没有错误消息的错误 当加载 PHP 页面时 我在 Firefox 中收到此错误 The connection to the server was reset while the page was loading 除了看起来是 Apa
  • 如何在编译时检查该类是否是抽象的?

    我所说的抽象类是指至少具有一个纯虚方法的类 如果检查显示该类是 我希望编译失败not抽象的 有可能吗 Use std is abstract http en cppreference com w cpp types is abstract
  • 请求/响应的 MQTT 主题名称

    我正在设计一个包含许多设备的系统 使用 MQTT 连接到中央代理 有些主设备可以向某些从设备发送请求 来自一台主机的请求通常会发送给一台从机 请求的主题可以是 mysystem slaveId req 因此从站可以订阅该主题 并且主站可以发
  • 使用包名称获取所有活动

    我想通过使用 PackageInfo 将应用程序中存在的所有活动作为列表获取 请告诉我有什么办法可以做到这一点 提前致谢 我的问题得到的答复如下 public static ArrayList
  • 如何在类的 Dispose 方法中取消订阅匿名函数?

    我有一个 A 类 在它的构造函数中 我正在为 Object B 的 eventHandler 分配一个匿名函数 如何从 A 类的 Dispose 方法中删除 取消订阅 它 任何帮助 将不胜感激 谢谢 Public Class A publi
  • 检查 UIImage 是否有 alpha(透明)颜色时出现问题

    我正在检查图像是否有透明区域 alpha 受到打击 我必须改变颜色UIImage 我已经实现了以下方法来检查图像是否有alpha or not BOOL checkAlpha UIImage image for int x 0 x lt i
  • 空或不需要的结构字段

    我有两个结构体 代表将插入到 mongodb 数据库中的模型 一个结构 投资 将另一个结构 集团 作为其字段之一 type Group struct Base Name string json name bson name type Inv