考虑将函数作为参数接受的函数:
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编排应该保持在“幕后”。
答案 0 :(得分:6)
否,类型必须准确。您的示例特别容易出错,因为I
绝对不能转换为*T
,但是它也无法以其他方式工作。如果您确定要传递给函数的I
的类型为*T
,则可以创建包装函数并将其传递。
func wrapper(i I) {
t := i.(*T)
myRealFunc(t)
}