Рассмотрим такую функцию, которая принимает функцию в качестве аргумента:
func f(arg func(I)){}
, где I
- интерфейс.
Есть ли способ передать в вышеприведенную функцию аргумент сигнатуры func(*T)
где T
реализует I
интерфейс.
Теперь, когда я передаю его, у меня появляется ошибка:
cannot use (type func(*T)) as type func(I) in argument
Вот игровая площадка: https://play.golang.org/p/7vilY4zkEzf
Вариант использования следующий:
Я пишу пакет с функцией f(a func(I), b I)
.Затем пользователь импортирует его как библиотеку.
В качестве следующего шага пользователь определит пользовательский тип T
, который реализует интерфейс I
, и пользовательскую функцию с подписью func(*T)
.Затем пользователь вызовет функцию библиотеки f
:
f(customFunction, customObject)
В свою очередь, пакет получит ее и создаст программу:
go customFunction(customObject)
Причина, по которой программы создаются внутри пакетазаключается в том, что оркестровка goroutine должна проводиться "под капотом".