为了账号安全,请及时绑定邮箱和手机立即绑定

带接口的函数可以作为参数传递吗?

带接口的函数可以作为参数传递吗?

Go
白衣非少年 2022-05-23 17:07:49
我知道函数可以作为参数传递。但我想使用一个函数,该函数采用实现接口的类型作为函数的输入。这还有可能吗?我已经尝试了以下,它给出cannot use myfn1 (type func(int)) as type fn in argument to test了错误。package mainimport "fmt"type intf interface{}type fn func(i intf)func myfn1(i int) {    fmt.Printf("\ni is %v", i)}func myfn2(i int) {    fmt.Printf("\ni is %v", i)}func test(f fn, val int) {    f(val)}func main() {    test(fn(myfn1), 123)    test(myfn2, 321)}你可以试试: https: //play.golang.org/p/Al7USxzmYST更改type fn func(i intf)为type fn func(i int)当然可以解决问题。但我不明白它是否可以与界面一起使用。
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以将任何类型的函数作为参数传递。但是,当您将函数作为参数传递时,函数签名必须匹配。因此,您不能传递采用接口的函数来代替采用 int 的函数。

将接口值传递给函数与传递 int 不同。当您调用具有 int 值的函数时,它只是传递该值。但是当你将一个 int 值传递给一个获取 interface{} 的函数时,它必须创建一个包含值类型和值本身的接口值,然后传递它。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号