需求
使用QueryRow 查询数据库中的记录数。
代码
func CountConnected(uid string) (int, error) {
var num int
err := db.QueryRow("SELECT COUNT(1) FROM tb_connect WHERE user_id=? AND status=1 ", uid).Scan(&num)
if err != nil {
if err == sql.ErrNoRows {
num = 0
} else {
log.Println("CountConnected", err.Error())
}
}
return num, err
}
报错
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x737d01]
goroutine 1 [running]:
database/sql.(*DB).conn(0x0, 0x9dbd00, 0xc0000680e8, 0x3d6c01, 0x203000000000000, 0x3effff, 0xc00)
c:/go/src/database/sql/sql.go:1080 +0x41
database/sql.(*DB).query(0x0, 0x9dbd00, 0xc0000680e8, 0x95703e, 0x43, 0xc000091c78, 0x2, 0x2, 0xc000052e01, 0x10, ...)
c:/go/src/database/sql/sql.go:1513 +0x6d
database/sql.(*DB).QueryContext(0x0, 0x9dbd00, 0xc0000680e8, 0x95703e, 0x43, 0xc000091c78, 0x2, 0x2, 0xc000091c00, 0x4097f2, ...)
c:/go/src/database/sql/sql.go:1495 +0xd8
database/sql.(*DB).QueryRowContext(...)
c:/go/src/database/sql/sql.go:1596
database/sql.(*DB).QueryRow(0x0, 0x95703e, 0x43, 0xc000091c78, 0x2, 0x2, 0x417646)
c:/go/src/database/sql/sql.go:1607 +0x94
_/d_/test/src/device.CountConnected(0x940304, 0x7, 0x20, 0x9c548e, 0x8)
d:/test/src/device/query.go:21 +0x10a
main.main()
d:/test/src/main.go:57 +0x52
exit status 2
db的初始化代码在哪里?猜测应该没有初始化。一般在包的init函数中初始化: