sql 库函数 querycontext 采用 where 子句的可变参数。我想创建一个辅助函数,它接受可变参数并将其发送到 querycontext 调用。
这是我的代码片段:
func genericdbselect(ctx context.context, qry string, params ...string) (*sql.rows, error) { // format the connectstr db, err := sql.open("mysql", connectstr) if err != nil || db == nil { msg := "could not get db connection. is db available?" return nil, fmt.errorf(msg) } rows, err := db.querycontext(ctx, qry, params) if err != nil { msg := fmt.sprintf("could not prep query = %v, params = %v. error = %v ", qry, params, err) return nil, fmt.errorf(msg) } return rows, err }
我这样称呼它:
rows, err := genericdbselect(ctx, qry, param1, param2)
当我运行此代码时,它会抛出以下错误:
SQL: converting argument $1 type: unsupported type []string, a slice of string
问题似乎是 genericdbselect 中的参数被接收为 []string 而不是 ...string。
进行以下两项更改:
声明 genericdbselect 以采用与 querycontext 相同类型的可变参数。这允许 params
无需转换即可传递。
func genericdbselect(ctx context.context, qry string, params ...any) (*sql.rows, error) {
使用 ...
语法将可变参数传递给 querycontext:
rows, err := db.QueryContext(ctx, qry, params...)
请参阅将参数传递给...参数了解更多信息。