gpt4 book ai didi

go - golang中函数的接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 01:22:58 24 4
gpt4 key购买 nike

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

func f(arg func(I)){}

I 是接口(interface)。

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

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

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

这里是 Playground : https://play.golang.org/p/7vilY4zkEzf

用例如下:

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

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

f(customFunction, customObject)

反过来,package 将接收它并创建一个 goroutine:

go  customFunction(customObject)

goroutines 在包“内部”创建的原因是 goroutine 编排应该在“幕后”进行。

最佳答案

不,类型需要准确。你的例子特别糟糕,因为 I 不能绝对转换为 *T,但它也不会以其他方式工作。如果您确定传递给您的函数的I 类型是*T,您可以创建包装函数并传递它.

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

关于go - golang中函数的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52825484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com