无法在参数中使用函数作为类型:故障排除
尝试将一个函数作为参数传递给另一个函数时,会发生此错误,但是函数签名与预期类型不匹配。特别是在 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中文网其他相关文章!