Truy vấn trả về một trường cho mỗi hàng. Mã đang quét cho ba. Có lẽ bạn muốn một cái gì đó như:
err := db.QueryRow("SELECT data->>'id', data->>'type', data->>'title' FROM message WHERE data->>'id'=$1", id).Scan(m.Id, m.Type, m.Title)
Ngoài ra, chuyển con trỏ đến các giá trị:
err := db.QueryRow("SELECT data->>'id', data->>'type', data->>'title' FROM message WHERE data->>'id'=$1", id).Scan(&m.Id, &m.Type, &m.Title)
Một tùy chọn khác là tìm nạp dữ liệu dưới dạng một trường duy nhất và giải mã kết quả bằng gói encoding / json.
var p []byte
err := db.QueryRow("SELECT data FROM message WHERE data->>'id'=$1", id).Scan(&p)
if err != nil {
// handle error
}
var m Message
err := json.Unmarshal(p, &m)
if err != nil {
// handle error
}