Golang中的功能接口

时间:2018-10-15 22:18:36

标签: go

考虑将函数作为参数接受的函数:

func f(arg func(I)){}

其中I是界面。

有什么方法可以将签名func(*T)的参数传递给上述函数,其中T实现I接口。

现在,当我通过它时,我出现了一个错误:

cannot use (type func(*T)) as type func(I) in argument

这是游乐场: https://play.golang.org/p/7vilY4zkEzf

使用案例如下:

我编写了具有f(a func(I), b I)功能的程序包。然后用户将其导入为库。

下一步,用户将定义实现T接口的自定义类型I和带有签名func(*T)的自定义函数。然后,用户将调用库f函数:

f(customFunction, customObject)

依次,程序包将收到它并创建一个goroutine:

go  customFunction(customObject)

创建goroutine的“内部”程序包的原因是goroutine编排应该保持在“幕后”。

1 个答案:

答案 0 :(得分:6)

否,类型必须准确。您的示例特别容易出错,因为I绝对不能转换为*T,但是它也无法以其他方式工作。如果您确定要传递给函数的I的类型为*T,则可以创建包装函数并将其传递。

func wrapper(i I) {
  t := i.(*T)
  myRealFunc(t)
}