不能在地图值中使用my_module.New(func()类型(* my_module.MyModule,错误)类型作为func()类型(core.Module,错误)

时间:2018-08-26 22:09:17

标签: go

在我的程序中,我有一个名为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

是否有可能使地图接受函数,该函数返回实现接口的结构而不是直接返回该接口?

1 个答案:

答案 0 :(得分:0)

您可以使用简单的匿名函数为地图形成兼容的函数签名,而无需更改my_module.New定义。匿名函数仍在其主体中调用my_module.New

constructors["name"] = func New() (core.Module, error) {
    return my_module.New()
}