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

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

在 interface{} 的位置傳遞結構時出錯

在 interface{} 的位置傳遞結構時出錯

Go
開心每一天1111 2022-11-08 15:49:53
所以,我有這樣的功能func ProcessRequest(requestBody *SignInRequest, response func(SignInResponse) *src.Response, error func(ControllerError) *src.Response) *src.Response {    return error(ControllerError{Code: http.StatusNotImplemented})}而我試圖稱之為ProcessRequest(payload, myFunction, handler.OnControllerError)func myFunction(i interface{}) *src.Response {}這向我顯示了一個錯誤不能使用 'myFunction' (type func(i interface{}) *src.Response) 作為類型 func(SignInResponse) *src.Response但是如果我嘗試同樣的事情type TestStruct struct {    }func myFunction2(i interface{}) *src.Response {}myFunction2(TestStruct{})然后它沒有顯示任何錯誤。我希望它interface{}作為一個論點,因為我想myFucntion成為可以接受任何struct.
查看完整描述

1 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

你混淆了兩件事。


當你有一個帶有 signaure 的函數時func (interface{}) *src.Response,你確實可以在傳遞任何類型的值的同時調用它,但事實并非如此。


發生的情況是您有另一個函數 ,ProcessRequest并且其參數的類型之一是類型為 的函數func (SignInResponse) *src.Response。

當您嘗試將類型值傳遞給func (interface{}) *src.Response接受類型參數的函數時會發生錯誤,func (SignInResponse) *src.Response因為這些參數的類型顯然不兼容。


更新。

要了解為什么參數的類型不兼容,請考慮SignInResponse并interface{}在內存中具有不同的存儲表示;基本上這就是為什么[]T和[]interface{}不兼容的原因,即使你可以做到t := T{}; var i interface{} = t。常見問題解答中對此進行了解釋。


至于手頭的問題,據說最簡單的方法是使用匿名函數將值“調整”SignInResponse為interface{}:傳遞給類似的ProcessResponse東西


func (r SignInResponse) *src.Response {

    return myFunction2(r)

}


查看完整回答
反對 回復 2022-11-08
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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