我知道函数可以作为参数传递。但是我想使用一个带有实现接口的类型的函数作为函数的输入。仍然有可能吗?
我尝试了以下操作,它给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)
当然可以解决此问题。但是我不知道是否可以使用该界面。
答案 0 :(得分:2)
您可以传递任何类型的函数作为参数。但是,当您将函数作为参数传递时,函数签名必须匹配。因此,您不能通过带有接口的函数来代替带有int的函数。
将接口值传递给函数不同于将int传递给函数。当您使用int值调用函数时,它只是传递该值。但是,当您将int值传递给获取interface {}的函数时,它必须创建一个包含值类型和值本身的接口值,并将其传递。