【发布时间】:2021-06-28 17:38:56
【问题描述】:
我有不同的 REST API 类型,它们有一些共同点:
- 所有类型都有Id
- 所有类型都有类型
- 所有类型都有属性,但属性不同
因为我不希望有大量不必要的类型,所以我想出了一种类型格式,但似乎不能被 sqlx 扫描。
type Pool struct {
Id *string `json:"id" db:"pool_id"`
Type *string `json:"type"`
Attributes struct {
Name *string `json:"name" db:"name"`
Description *string `json:"description" db:"description"`
} `json:"attributes"`
}
type User struct {
Id *string `json:"id" db:"user_id"`
Type *string `json:"type"`
Attributes struct {
FirstName *string `json:"first_name" db:"first_name"`
LastName *string `json:"last_name" db:"last_name"`
} `json:"attributes"`
}
尝试将 SQL 结果加载到变量中时出现错误:missing destination name name in *main.Pool
package main
import (
_ "github.com/jmoiron/sqlx"
)
func selectOne() interface{} {
pa := Pool{}
err := dbx.Get(&pa, "SELECT * FROM pools LIMIT 1")
if err != nil {
panic(err)
}
return pa
}
由于名称存在,我不明白为什么这不起作用。非常感谢任何如何解决这个问题的建议!
【问题讨论】:
-
SQL 结果是一组列,而不是分层结构的数据。
sqlx将列映射到结构字段。如果你想做这样的事情,你可以嵌入你的公共属性而不是让它成为一个字段(虽然在你的例子中使用匿名类型,但不清楚你为什么要这样做)。 -
我正在尝试这样做,以便能够通过编组具有给定类型的变量来提供正确的 JSON API 输出。非常欢迎其他解决方案。
-
如果您的 JSON 是分层结构的并且来自扁平的非结构化源(如 SQL),您可能需要使用单独的类型来表示每个。
-
你找到解决这个问题的方法了吗?
-
Attributes是另一个 sql 表吗?如果是,那么你需要在你的 sql 查询中加入它
标签: go