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

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

Patricia Arquette
Patricia Arquette原创
2024-11-22 09:07:14347浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn