注册

golang带上下文查询QueryContext

XI￿ 2021/10/25 1888 7

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm8_20210719_x86_win_64_ent
【操作系统】:WIN10_x64
【CPU】: i7-9700
【问题描述】*:
背景:
golang 1.14
驱动来源为DM安装目录
将驱动接入现有框架时,发生空指针错误,排查后发现是context变量导致
测试代码:

var ctx, _ = context.WithCancel(context.Background())
var sql = `SELECT "id","name","password" FROM "user" WHERE "id"=:1`
rows, err := db.QueryContext(ctx, sql, 1)

当ctx为context.Background()时查询/插入数据正常
堆栈日志:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0xe9 pc=0x799ee6]

goroutine 1 [running]:
main/dm.dm_build_849(0xc000044180, 0xc00004e3c0, 0xc0000056c0, 0x1, 0x1, 0x1)
	E:/Lx/Projects/dm_test/dm/zq.go:938 +0x46
main/dm.(*dm_build_332).Dm_build_439(0xc000044180, 0xc00004e3c0, 0xc00003b130, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0)
	E:/Lx/Projects/dm_test/dm/a.go:446 +0x496
main/dm.(*DmStatement).executeInner(0xc00004e3c0, 0xc00061c190, 0x1, 0x1, 0x1, 0x0, 0x80cf00)
	E:/Lx/Projects/dm_test/dm/u.go:883 +0x7e
main/dm.(*DmStatement).query(0xc00004e3c0, 0xc00061c190, 0x1, 0x1, 0x0, 0x1, 0x1)
	E:/Lx/Projects/dm_test/dm/u.go:417 +0x5f
main/dm.(*DmStatement).queryContext(0xc00004e3c0, 0x9432c0, 0xc000648d80, 0xc00006d650, 0x1, 0x1, 0x0, 0x0, 0x0)
	E:/Lx/Projects/dm_test/dm/u.go:436 +0x106
main/dm.(*DmConnection).queryContext(0xc00007f900, 0x9432c0, 0xc000648d80, 0x8b8031, 0x37, 0xc00006d650, 0x1, 0x1, 0x0, 0x0, ...)
	E:/Lx/Projects/dm_test/dm/m.go:641 +0x2b2
main/dm.(*DmConnection).QueryContext(0xc00007f900, 0x9432c0, 0xc000648d80, 0x8b8031, 0x37, 0xc00006d650, 0x1, 0x1, 0x898780, 0x34e1e0, ...)
	E:/Lx/Projects/dm_test/dm/m.go:302 +0x9c
database/sql.ctxDriverQuery(0x9432c0, 0xc000648d80, 0x27395058, 0xc00007f900, 0x0, 0x0, 0x8b8031, 0x37, 0xc00006d650, 0x1, ...)
	D:/Go/src/database/sql/ctxutil.go:48 +0x22e
database/sql.(*DB).queryDC.func1()
	D:/Go/src/database/sql/sql.go:1579 +0x1e2
database/sql.withLock(0x93dd80, 0xc000158620, 0xc000071c28)
	D:/Go/src/database/sql/sql.go:3211 +0x70
database/sql.(*DB).queryDC(0xc0001520c0, 0x9432c0, 0xc000648d80, 0x0, 0x0, 0xc000158620, 0xc00003b120, 0x8b8031, 0x37, 0xc000071e78, ...)
	D:/Go/src/database/sql/sql.go:1574 +0x5e4
database/sql.(*DB).query(0xc0001520c0, 0x9432c0, 0xc000648d80, 0x8b8031, 0x37, 0xc000071e78, 0x1, 0x1, 0xc00007e401, 0x8c0f30, ...)
	D:/Go/src/database/sql/sql.go:1557 +0x13d
database/sql.(*DB).QueryContext(0xc0001520c0, 0x9432c0, 0xc000648d80, 0x8b8031, 0x37, 0xc000071e78, 0x1, 0x1, 0xc000071e80, 0x4e8de8, ...)
	D:/Go/src/database/sql/sql.go:1534 +0xd8
main.queryUser(0x1, 0x0, 0x0)
	E:/Lx/Projects/dm_test/main.go:165 +0x13c
main.main()
	E:/Lx/Projects/dm_test/main.go:35 +0x105
回答 0
暂无回答
扫一扫
联系客服