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


从错误信息看,问题在于结构体字段标签与查询返回的列名不匹配。你的查询返回 idaction_count,但结构体期望的是 bot_idaction_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"`
}

主要修改:

  1. 将结构体标签 db:"bot_id" 改为 db:"id",使其与查询返回的 id 列名匹配
  2. 修正了 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 列,与结构体标签完全匹配。

回到顶部