大家好,我们又见面了啊~本文《Go Lang、Postgres:扫描后无法获取 oid》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~
问题内容如果表 accounts
我有 2 列:
oid
和 balance
通过下一个代码,我尝试提取 oid
然后 balance
:
// variable `id` comes from an another part
sqlstr := `select * ` +
`from accounts ` +
`where oid=` + id + `;`
q, err := db.query(sqlstr)
if err != nil {
fmt.println("error: getaccount \n", err)
return account{}, err
}
defer q.close()
var _id string
var bal float64
q.next()
q.scan(&_id)
fmt.println("_id ", _id)
q.next()
q.scan(&bal)
fmt.println("bal ", bal)
在第一个 q.next()
之后,我希望提取 oid
,在第二个 balance
之后提取 balance
。
但是每次在第一个 q.next()
之后和第二个之后我只得到 balance
。
我尝试将 sqlstr
更改为下一个:
sqlstr := `SELECT oid, balance ` +
`FROM accounts ` +
`WHERE oid=` + id + `;`
但我仍然无法提取oid。
解决方案
试试这个 q.scan(&_id, &bal)
, func (*Row) Scan 有这个签名:
func (r *row) scan(dest ...interface{}) error
它期望指针指向将存储查询数据的值。
如果您只查询单行,则有 func (*DB) QueryRow()。那么您的代码将简化为
row := db.QueryRow(sqlstr)
err := row.Scan(&_id, &bal)
// err will be sql.ErrNoRows if no rows have been selected
好了,本文到此结束,带大家了解了《Go Lang、Postgres:扫描后无法获取 oid》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!