Нельзя использовать my_module.New (тип func () (* my_module.MyModule, error)) как тип func () (core.Module, error) в значении карты - PullRequest
0 голосов
/ 27 августа 2018

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

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете использовать простую анонимную функцию для формирования подписи совместимой функции для вашей карты без изменения определения my_module.New.Анонимная функция все еще вызывает my_module.New в своем теле:

constructors["name"] = func New() (core.Module, error) {
    return my_module.New()
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...