结构中的结构: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" }
可能的替代方案
如果不需要这样做,有几种替代方法:
以上是如何使用 SQLX 有效扫描嵌套结构?的详细内容。更多信息请关注PHP中文网其他相关文章!