我试图弄清楚在 go 的内置数据库/sql 包中使用命名参数的模式是什么。我查看了 oracle 驱动程序,但它似乎只是 C 库的包装器。人们是否以优雅的方式解决了这个问题?到目前为止,我只是通过将{0},{1}作为单元测试中的参数来解决这个问题,但是能够将它们正常用作 amap[string]interface{}或其他东西肯定会很好。有没有人有一个似乎惯用的想法或实现?
作为参考,这里是一个测试:
db := testConn()
stmt, err := db.Prepare("return {0} as int1, {1} as int2")
if err != nil {
t.Fatal(err)
}
rows, err := stmt.Query(123, 456)
if err != nil {
t.Fatal(err)
}
rows.Next()
var test int
var test2 int
err = rows.Scan(&test, &test2)
if err != nil {
t.Fatal(err)
}
if test != 123 {
t.Fatal("test != 123;", test)
}
if test2 != 456 {
t.Fatal("test2 != 456;", test2)
}
我正在做的Query是:
func (stmt *cypherStmt) Query(args []driver.Value) (driver.Rows, error) {
cyphReq := cypherRequest{
Query: stmt.query,
}
if len(args) > 0 {
cyphReq.Params = make(map[string]interface{})
}
for idx, e := range args {
cyphReq.Params[strconv.Itoa(idx)] = e
}
...
相关分类