如何正确地使用 go-pg 执行 queryOne?

how to do queryOne with go-pg properly?

我想 queryOne 使用 go-pg 只有 return 对象的一行而不是数组。

这是我的简单代码:

var reportMessage *ReportMessage
    _, err := db.Model((*ReportMessage)(nil)).QueryOne(&reportMessage, `
    SELECT 
        SUM(total_order) total_order,
        SUM(total_message) total_message,
        SUM(hsm_message) hsm_message ,
        SUM(outbound_message) outbound_message ,
        SUM(inbound_message) inbound_message ,
        SUM(total_order_amount) total_order_amount 
        FROM report_message rm WHERE seller_id =? and "date" between ? and ?;

    `, sellerID, dateStart, dateEnd)

    if err != nil {
        return nil, err
    }

    return reportMessage, nil
type ReportMessage struct {
    ID               string    `json:"id"`
    SellerID         string    `json:"seller_id"`
    TotalOrder       int       `json:"total_order"`
    Date             time.Time `json:"date"`
    HsmMessage       int       `json:"hsm_message"`
    TotalMessage     int       `json:"total_message"`
    OutboundMessage  int       `json:"outbound_message"`
    InboundMessage   int       `json:"inbound_message"`
    TotalOrderAmount float32   `json:"total_order_amount"`
}

我希望它 return reportMessage 只是一个数组。

这是我的错误:

json: cannot unmarshal number into Go value of type models.ReportMessage

如何只查询一行并且return它不是数组的对象?

您需要初始化模型的实例并将指针传递给该实例,而不是将指针传递给模型的未初始化的 nil 指针。

reportMessage := new(ReportMessage)
_, err := db.Model((*ReportMessage)(nil)).QueryOne(reportMessage, `
SELECT 
    SUM(total_order) total_order,
    SUM(total_message) total_message,
    SUM(hsm_message) hsm_message ,
    SUM(outbound_message) outbound_message ,
    SUM(inbound_message) inbound_message ,
    SUM(total_order_amount) total_order_amount 
    FROM report_message rm WHERE seller_id =? and "date" between ? and ?;

`, sellerID, dateStart, dateEnd)

if err != nil {
    return nil, err
}

return reportMessage, nil