所以,我有這樣的功能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)
}
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消
