我知道函数可以作为参数传递。但我想使用一个函数,该函数采用实现接口的类型作为函数的输入。这还有可能吗?我已经尝试了以下,它给出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{} 的函数时,它必须创建一个包含值类型和值本身的接口值,然后传递它。
- 1 回答
- 0 关注
- 253 浏览
添加回答
举报
0/150
提交
取消
