golang:不能在prepared语句中使用sql.namedarg

zu0ti5jz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(732)

我有一个查询正在使用sql.db中的namedargs,在生成时出现了一个错误

cannot use args (type []sql.NamedArg) as type []interface {} in argument to stmt.Exec

sql库中的示例显示了它的用途:

Example usage:
    db.ExecContext(ctx, `
     delete from Invoice
     where
     TimeCreated < @end
     and TimeCreated >= @start;`,
     sql.Named("start", startTime),
     sql.Named("end", endTime),
    )

唯一的区别是我现在使用的是一个准备好的语句 stmt 打电话给 Exec 方法。我用我的值创建了一个namedarg片段,它使用 ... 扩展器。

res, err := stmt.Exec(args...)

当示例显示 sql.Named() 方法直接在代码中调用?为什么扩展的切片不起作用?

inb24sb2

inb24sb21#

这就是在go中向变量函数传递参数的工作原理。可以传递任何类型的单个值,也可以传入元素类型与可变参数类型完全匹配的切片,并在其后面加上 ... .
i、 e.您可以:

res, err := stmt.Exec(
    sql.Named("start", startTime),
    sql.Named("end", endTime),
)

或者你可以:

args := []interface{}{
    sql.Named("start", startTime),
    sql.Named("end", endTime),
}
res, err := stmt.Exec(args...)

相关问题