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

时间:2020-03-31 17:29:31

标签: function go interface

我知道函数可以作为参数传递。但是我想使用一个带有实现接口的类型的函数作为函数的输入。仍然有可能吗?

我尝试了以下操作,它给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://teckangaroo.com/chrome-disable-web-security/

进行尝试

type fn func(i intf)更改为type fn func(i int)当然可以解决此问题。但是我不知道是否可以使用该界面。

1 个答案:

答案 0 :(得分:2)

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

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