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

我知道函数可以作为参数传递。但我想使用一个函数,该函数采用实现接口的类型作为函数的输入。这还有可能吗?


我已经尝试了以下,它给出cannot use myfn1 (type func(int)) as type fn in argument to test了错误。


package main


import "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)当然可以解决问题。但我不明白它是否可以与界面一起使用。


白衣非少年
浏览 254回答 1
1回答

胡子哥哥

您可以将任何类型的函数作为参数传递。但是,当您将函数作为参数传递时,函数签名必须匹配。因此,您不能传递采用接口的函数来代替采用 int 的函数。将接口值传递给函数与传递 int 不同。当您调用具有 int 值的函数时,它只是传递该值。但是当你将一个 int 值传递给一个获取 interface{} 的函数时,它必须创建一个包含值类型和值本身的接口值,然后传递它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go