首页 > 后端开发 > Golang > 如何使用 SQLX 有效扫描嵌套结构?

如何使用 SQLX 有效扫描嵌套结构?

Patricia Arquette
发布: 2024-11-22 09:07:14
原创
365 人浏览过

How to Effectively Scan Nested Structs Using SQLX?

结构中的结构:SQLX 高级扫描指南

使用 SQLX 时,您可能会遇到将数据扫描到嵌套结构中的挑战。让我们考虑这个示例:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address Address `json:"adress"` // Oops, missing embedded property
}
type Address struct {
   Street string `json:"street" db:"street"`
   City   string `json:"city" db:"city"`
}
登录后复制

尝试使用此定义扫描数据时,您将遇到以下错误:

missing destination name street in *models.Customer
登录后复制

解决方案:拥抱嵌入式结构

解决这个问题的关键在于理解SQLX的深度扫描能力。正如文档所示,它支持嵌入结构,将其字段提升到父结构中。要实现此目的,只需将地址嵌入到客户中即可:

type Customer struct {
   Id     int    `json:"id" db:"id"`
   Name   string `json:"name" db:"name"`
   Address Address
}
登录后复制

请注意,我们删除了地址字段自己的 db 标签,因为它不再是单独的实体。

警告:扁平化JSON 输出

但是,嵌入地址会扁平化 Customer 的 JSON 输出struct,因为 Name 和 City 现在都是直接属性:

{
    "id": 1,
    "name": "foo",
    "street": "bar",
    "city": "baz"
}
登录后复制

可能的替代方案

如果不需要这样做,有几种替代方法:

  1. 重新映射:将数据扫描到map[string]interface{} 并使用自定义逻辑重新映射它。
  2. 定义接口类型:创建一个表示所需数据结构的接口,并使用 Address 和 Customer 结构实现它。

以上是如何使用 SQLX 有效扫描嵌套结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板