在 Go 中,将函数作为参数传递可以实现更大的灵活性和代码重用。但是,尝试传递具有不同签名的函数作为参数时存在一些限制。
考虑这样的场景:您想要创建一个能够包装任何现有函数的decorator() 函数。对于具有单个参数和返回值的函数(例如 funcA),使用 func(interface{}) interface{} 作为参数类型非常简单。
问题: 函数可以吗像 funcB 一样,它接受并返回特定类型(在本例中为字符串),转换为 func(interface{}) interface{} 类型以兼容Decorator()?
答案: 不幸的是,如果不使用泛型,这在 Go 中是不可能的。原因在于函数之间参数传递机制的根本差异。
例如,接受结构体作为参数的函数单独接收其每个成员。相反,接受包含该结构的接口{}的函数将接收两个值:结构类型的描述符和指向结构的指针。
因此,为了实现所需的行为,需要一个适配器函数弥合原始函数签名和预期 func(interface{}) interface{} 类型之间的差距。
以上是Go 的'decorator()”函数可以在没有泛型的情况下处理具有特定返回类型的函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!