В моей программе у меня есть интерфейс с именем 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
Можно ли как-то сделатьmap принимает функции, которые возвращают структуры, реализующие интерфейс вместо непосредственного возврата этого интерфейса?