無法在參數中使用函數作為類型:故障排除
嘗試將一個函數作為參數傳遞給另一個函數時,會發生此錯誤,但是函數簽章與預期類型不符。特別是在 Go 程式設計的情況下,當您嘗試傳遞一個採用特定結構化參數並傳回介面和錯誤的函數作為另一個函數的要求時,就會出現此問題。
理解問題
錯誤訊息「cannot use function (type func()) as type in argument」表示您嘗試傳遞的函數與所需的類型不匹配爭論。在這種情況下,參數需要 MessageHandler 介面的實現,該介面具有特定的函數簽名。
修復問題
要解決此錯誤,您必須確保您的函數遵循MessageHandler 介面的預期簽名:
type MessageHandler func(MessageDelivery) (interface{}, error)
這意味著您的函數必須:
傳回具有兩個值的元組:
範例:
修改您的函數以與所需簽名保持一致:
func UpperCaseHandler(md MessageDelivery) (interface{}, error) { s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery) return nil, nil } func RepeatHandler(md MessageDelivery) (interface{}, error) { s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery) return nil, nil }
現在,這些函數與MessageHandler 介面相容,並且可以作為參數傳遞給ConsumerFunc()方法。
以上是為什麼 Go 會拋出「無法使用函數作為參數類型」錯誤,以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!