z := NewFoo(&Foo{}, "o") func NewFoo(a FooAdapter, v string) *Foo { return &Foo{ adapter: a, mvar: v} }
тут ты создаешь структуру Foo, отдаешь ее в функцию NewFoo, которая создает внутри структуру Foo и сует Foo которую ты передал как провайдер в только что созданную Foo