क्वेरी प्रति पंक्ति एक फ़ील्ड लौटाती है। कोड तीन के लिए स्कैन कर रहा है। शायद आप कुछ ऐसा चाहते हैं:
err := db.QueryRow("SELECT data->>'id', data->>'type', data->>'title' FROM message WHERE data->>'id'=$1", id).Scan(m.Id, m.Type, m.Title)
साथ ही, मानों को पॉइंटर्स पास करें:
err := db.QueryRow("SELECT data->>'id', data->>'type', data->>'title' FROM message WHERE data->>'id'=$1", id).Scan(&m.Id, &m.Type, &m.Title)
एक अन्य विकल्प डेटा को एकल फ़ील्ड के रूप में लाना और परिणाम को एन्कोडिंग/जेसन पैकेज के साथ डिकोड करना है।
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
}