在我的程序中,我有一个名为core.Module
的接口和一个实现这个接口的结构,称为my_module.MyModule
。创建实现我的接口的结构的函数将添加到映射中,以便稍后按名称调用它们:
type moduleConstructor func() (core.Module, error)
constructors := make(map[string]moduleConstructor)
constructors["name"] = my_module.New
不幸的是,完成这项工作的唯一方法是创建以下New
函数:
func New() (core.Module, error) {
}
我非常希望使用推荐的签名:
func New() (*my_module.MyModule, error) {
}
但是,这会导致以下错误:
cannot use my_module.New (type func() (*my_module.MyModule, error)) as type
func() (core.Module, error) in map value
是否有可能以某种方式使映射接受返回实现接口的结构而不是直接返回该接口的函数?
您可以使用简单的匿名函数为地图形成兼容的函数签名my_module.New
而无需更改定义。匿名函数仍然在其主体中调用my_module.New
:
constructors["name"] = func New() (core.Module, error) {
return my_module.New()
}