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

时间:2015-10-13 03:07:40

标签: go

我收到此错误

 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)

我选择的表格如下:

enter image description here

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

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

var DB *sqlx.DB

我正在使用一个指针来捕获数据库中的NULL列。我正在使用指针,因为我不确定sql.NullInt64是否适用于sqlx库。

为什么会出现此错误?我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

override func viewWillAppear(animated: Bool) { self.navigationController?.navigationBarHidden = true } 需要一个指向指针的指针才能使其工作:

Scan

然后在使用值var id int64 var replyTo *int64 replyTo = new(int64) query := ` SELECT id, reply_to FROM message WHERE id = 211 LIMIT 1; ` // The change is here : &replyTo instead of just replyTo if err := sql.DB.QueryRow(query).Scan(&id, &replyTo); err != nil { log.Println(err) } spew.Dump(id, replyTo)

之前不要忘记测试replyTo == nil

替代解决方案:使用*replyTohttps://golang.org/pkg/database/sql/#NullInt64