猿问

database/sql 和 database/sql/driver 中的命名参数

我试图弄清楚在 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

   }

...


幕布斯7119047
浏览 216回答 3
3回答
随时随地看视频慕课网APP

相关分类

Go
我要回答