在 Go 中尝试扫描到 int64 指针时出错

我收到这个错误


 Scan error on column index 1: converting string "<nil>" to a int64:

 strconv.ParseInt: parsing "<nil>": invalid syntax

尝试运行此简单代码时:


var id int64

var replyTo *int64

replyTo = new(int64)


query := `

    SELECT id, reply_to

    FROM message

    WHERE id = 211

    LIMIT 1;

`

if err := sql.DB.QueryRow(query).Scan(&id, replyTo); err != nil {

    log.Println(err)

}


spew.Dump(id, replyTo)

我从中选择的表格如下所示:

http://img2.mukewang.com/619215090001237c06680124.jpg

如果我将选择查询更改为: WHERE id = 210,而不是 211 则它可以工作。

sql.DB 只是 sqlx 库的一个实例。

var DB *sqlx.DB

我正在使用指针来捕获数据库中的 NULL 列。我正在使用指针,因为我不确定 sql.NullInt64 是否与 sqlx 库配合良好。

为什么我会收到这个错误?我该怎么办?


宝慕林4294392
浏览 187回答 1
1回答

富国沪深

Scan 需要一个指向您的指针的指针才能工作:var id int64var replyTo *int64replyTo = new(int64)query := `&nbsp; &nbsp; SELECT id, reply_to&nbsp; &nbsp; FROM message&nbsp; &nbsp; WHERE id = 211&nbsp; &nbsp; LIMIT 1;`// The change is here : &replyTo instead of just replyToif err := sql.DB.QueryRow(query).Scan(&id, &replyTo); err != nil {&nbsp; &nbsp; log.Println(err)}spew.Dump(id, replyTo)然后不要忘记replyTo == nil在使用该值之前进行测试*replyTo替代解决方案:使用sql.NullInt64:https : //golang.org/pkg/database/sql/#NullInt64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go