我指的是以下方法,该方法将最后一个参数作为 args ...interfact{})
func (*sqlx.DB).Select(dest interface{}, query string, args ...interface{}) error
https://godoc.org/github.com/jmoiron/sqlx#DB.Select
据我了解,该方法接受任何类型的最后一个参数,该参数是可变参数..
所以
selectStmt = 'Select * FROM users where user_id IN (?)'
selectStmt, userArgs, err := sqlx.In(selectStmt, userIDs)// userIDs is a slice
if err != nil {
return nil, errors.Wrap(err, "")
}
selectStmt = s.db.Rebind(selectStmt)
var users []User
err = s.db.Select(&users, selectStmt, userArgs) // wrong one .. Line A
err = s.db.Select(&users, selectStmt, userArgs... ) // right one .. Line B
在上述代码中,如果我注释掉 Line B ,但不注释掉 Line A ,则它不起作用。我收到以下错误。
sql: 转换参数 $1 类型: 不支持的类型 []interface {}, 接口的切片 *
问题
这里到底发生了什么,为什么不能自动推断变量?需要向第三个参数传递额外的“...”吗?
慕无忌1623718
相关分类