首页 > 后端开发 > Golang > 为什么 Golang 在传递函数时会抛出'cannot use function (type func()) as type in argument”错误?

为什么 Golang 在传递函数时会抛出'cannot use function (type func()) as type in argument”错误?

Patricia Arquette
发布: 2024-12-11 09:37:10
原创
693 人浏览过

Why Does Golang Throw a

“不能使用函数(类型 func())作为参数类型”

在 Golang 中,当将一个函数作为参数传递给另一个函数时,类型签名传递函数的签名必须与接收函数的预期签名匹配。在您的代码中,您尝试将以下函数作为参数传递:

UpperCaseHandler
RepeatHandler
登录后复制

但是,消息处理函数的预期类型签名是:

type MessageHandler func(MessageDelivery) (interface{}, error)
登录后复制

如您所见,预期的消息处理函数采用 MessageDelivery 结构作为参数,并返回一个 interface{} 和一个错误。但是,您的函数定义如下:

func UpperCaseHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
}

func RepeatHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
}
登录后复制

请注意,您的函数缺少返回值(interface{} 和错误)。要解决此问题,您需要修改函数以匹配预期的签名。具体方法如下:

func UpperCaseHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
     return nil, nil
}

func RepeatHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
     return nil, nil
}
登录后复制

通过添加缺少的返回值,您的函数现在将与预期的签名匹配,并且您将能够将它们作为参数传递给其他函数,而不会遇到“无法使用函数(类型 func())作为参数类型”错误。

以上是为什么 Golang 在传递函数时会抛出'cannot use function (type func()) as type in argument”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板