我指的是以下方法,該方法將最后一個參數作為 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 關注
- 125 瀏覽
添加回答
舉報
0/150
提交
取消