亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

args ...interface{} 對于方法參數到底意味著什么?

args ...interface{} 對于方法參數到底意味著什么?

Go
縹緲止盈 2023-07-17 17:54:02
我指的是以下方法,該方法將最后一個參數作為 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 不希望你做出假設,而是希望你是明確的。


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號