У меня есть пакет, экспортирующий функцию, которая возвращает структурный указатель, которым я не могу управлять.Я хотел бы обернуть эту функцию, чтобы обеспечить шов зависимостей, чтобы я мог провести некоторое модульное тестирование.Идея в том, что я хочу подделать, а не то, что мне дает внешний пакет.
Пример выглядит следующим образом:
/////////////////////////////////////
// External Package I can't control.
/////////////////////////////////////
package ex
type Foo struct {
v int
}
func (f *Foo) GetV() int {
return f.v
}
func CreateFoo(v int) *Foo {
return &Foo{v: v}
}
////////////////////////////////////
// Local Package I'm testing.
////////////////////////////////////
type IFoo interface {
GetV() int
}
type factory = func(v int) IFoo
var factoryFn factory = ex.CreateFoo
Это приводит к ошибке: cannot use CreateFoo (type func(int) *Foo) as type func(int) IFoo in assignment
Поскольку я думаю, что *Foo
является IFoo
, почему бы и нет?Что мне не хватает?Есть ли способ добиться того, что я пытаюсь сделать, используя такой крючок?
Playground ссылка на пример: https://play.golang.org/p/FDckAQGNRgA