首页 >后端开发 >Golang >Go 的'decorator()”函数可以在没有泛型的情况下处理具有特定返回类型的函数吗?

Go 的'decorator()”函数可以在没有泛型的情况下处理具有特定返回类型的函数吗?

DDD
DDD原创
2024-12-26 19:47:31576浏览

Can Go's `decorator()` function handle functions with specific return types without generics?

在 Go 中将任意函数传递给参数

在 Go 中,将函数作为参数传递可以实现更大的灵活性和代码重用。但是,尝试传递具有不同签名的函数作为参数时存在一些限制。

考虑这样的场景:您想要创建一个能够包装任何现有函数的decorator() 函数。对于具有单个参数和返回值的函数(例如 funcA),使用 func(interface{}) interface{} 作为参数类型非常简单。

问题: 函数可以吗像 funcB 一样,它接受并返回特定类型(在本例中为字符串),转换为 func(interface{}) interface{} 类型以兼容Decorator()?

答案: 不幸的是,如果不使用泛型,这在 Go 中是不可能的。原因在于函数之间参数传递机制的根本差异。

例如,接受结构体作为参数的函数单独接收其每个成员。相反,接受包含该结构的接口{}的函数将接收两个值:结构类型的描述符和指向结构的指针。

因此,为了实现所需的行为,需要一个适配器函数弥合原始函数签名和预期 func(interface{}) interface{} 类型之间的差距。

以上是Go 的'decorator()”函数可以在没有泛型的情况下处理具有特定返回类型的函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn