我指的是以下方法,該方法將最后一個(gè)參數(shù)作為 args ...interfact{})func (*sqlx.DB).Select(dest interface{}, query string, args ...interface{}) errorhttps://godoc.org/github.com/jmoiron/sqlx#DB.Select據(jù)我了解,該方法接受任何類型的最后一個(gè)參數(shù),該參數(shù)是可變參數(shù)..所以 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 ,則它不起作用。我收到以下錯(cuò)誤。sql: 轉(zhuǎn)換參數(shù) $1 類型: 不支持的類型 []interface {}, 接口的切片 *問題這里到底發(fā)生了什么,為什么不能自動(dòng)推斷變量?需要向第三個(gè)參數(shù)傳遞額外的“...”嗎?
1 回答

慕無(wú)忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
這里到底發(fā)生了什么,為什么不能自動(dòng)推斷變量?需要向第三個(gè)參數(shù)傳遞額外的“...”嗎?
Go 不會(huì)自動(dòng)推斷變量 - 事實(shí)上,Go 故意推斷得很少,自動(dòng)執(zhí)行的操作也很少。您需要它,...
因?yàn)?/em>它不會(huì)推斷。它還清楚地表明,當(dāng)您將切片傳遞給可變參數(shù)時(shí),您是否意味著將其分解,或者意味著切片本身是單個(gè)參數(shù);兩者都可能是一個(gè)有效的用例,Go 不希望你做出假設(shè),而是希望你是明確的。
- 1 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報(bào)
0/150
提交
取消