Golang从PSQL获取数据计数的方法
Golang从PSQL获取数据计数的方法 你好,
我正在尝试从 PostgreSQL 数据库中获取 ID 及其相关参数的计数,但在 Go 语言中遇到了问题。我被卡住了,因为我收到了类似这样的错误:“missing destination name action_count in *[]store.stat”。
我的函数如下:
func (orgStore) GetBotStat(db *sqlx.DB, IDS uint64) (stat []Stat, err error) {
q := `SELECT id , count(action) AS action_count from snapshot WHERE id IN ( select id from bot where ids = $1) GROUP BY id ORDER BY id`
err = db.Select(&stat, q, IDS)
return
}
type Stat struct{
ID string `json:"bot_id" db:"bot_id"`
ActionCount uint64 `json:"action_count" db:action_count`
}
有人能帮我解决这个问题吗? 我有点困惑如何在 Go 语言中从同一个查询中获取计数和其他数据。
提前感谢。
更多关于Golang从PSQL获取数据计数的方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
amitjain3087:
ActionCount uint64
json:"action_count" db:action_count
将其从:
ActionCount uint64 `json:"action_count" db:action_count`
改为
ActionCount uint64 `json:"action_count" db:"action_count"`
更多关于Golang从PSQL获取数据计数的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
从错误信息看,问题在于结构体字段标签与查询返回的列名不匹配。你的查询返回 id 和 action_count,但结构体期望的是 bot_id 和 action_count。
以下是修正后的代码:
func (orgStore) GetBotStat(db *sqlx.DB, IDS uint64) (stat []Stat, err error) {
q := `SELECT id, count(action) AS action_count
FROM snapshot
WHERE id IN (SELECT id FROM bot WHERE ids = $1)
GROUP BY id
ORDER BY id`
err = db.Select(&stat, q, IDS)
return
}
type Stat struct {
ID string `json:"bot_id" db:"id"`
ActionCount uint64 `json:"action_count" db:"action_count"`
}
主要修改:
- 将结构体标签
db:"bot_id"改为db:"id",使其与查询返回的id列名匹配 - 修正了
action_count标签的语法错误(缺少引号)
如果确实需要保持 bot_id 作为 JSON 字段名,但查询返回的是 id,可以修改查询:
func (orgStore) GetBotStat(db *sqlx.DB, IDS uint64) (stat []Stat, err error) {
q := `SELECT id AS bot_id, count(action) AS action_count
FROM snapshot
WHERE id IN (SELECT id FROM bot WHERE ids = $1)
GROUP BY id
ORDER BY id`
err = db.Select(&stat, q, IDS)
return
}
type Stat struct {
ID string `json:"bot_id" db:"bot_id"`
ActionCount uint64 `json:"action_count" db:"action_count"`
}
这样查询返回 bot_id 列,与结构体标签完全匹配。

