我指的是以下方法,该方法将最后一个参数作为 args ...interfact{})func (*sqlx.DB).Select(dest interface{}, query string, args ...interface{}) errorhttps://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 {}, 接口的切片 *问题这里到底发生了什么,为什么不能自动推断变量?需要向第三个参数传递额外的“...”吗?
1 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
这里到底发生了什么,为什么不能自动推断变量?需要向第三个参数传递额外的“...”吗?
Go 不会自动推断变量 - 事实上,Go 故意推断得很少,自动执行的操作也很少。您需要它,...
因为它不会推断。它还清楚地表明,当您将切片传递给可变参数时,您是否意味着将其分解,或者意味着切片本身是单个参数;两者都可能是一个有效的用例,Go 不希望你做出假设,而是希望你是明确的。
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消