Go语言 如何将值从可变参数传递给函数中的可变参数

d7v8vwbk  于 2023-01-22  发布在  Go
关注(0)|答案(1)|浏览(163)

SQL库func QueryContext为where子句获取varadic参数。我想创建一个获取varadic参数的helper函数,并将其发送到QueryContext调用。以下是我的代码片段:

func GenericDBSelect(ctx context.Context, qry string, params ...string) (*sql.Rows, error) {

//格式化连接字符串数据库,错误:= sql.Open(“mysql”,连接字符串)

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。

ruyhziif

ruyhziif1#

进行以下两项更改:

  • 声明GenericDBSelect以采用与QueryContext相同类型的可变参数。这允许params在不进行转换的情况下传递。
func GenericDBSelect(ctx context.Context, 
       qry string, params ...any) (*sql.Rows, error) {
  • 使用...语法将可变参数传递给QueryContext:
rows, err := db.QueryContext(ctx, qry, params...)

有关详细信息,请参见将参数传递给...参数。

相关问题