2019-06-05 20:27 阅读 26


Here is a sample code most of it is copied from official golang doc here I only added the last piece of code which generates an instance for a type that consumes Fooer interface.

 type Fooer interface {
        Foo() string

type MyFooer string

func (b *MyFooer) Foo() string {
    return string(*b)

func provideMyFooer() *MyFooer {
    b := new(MyFooer)
    *b = "Hello, World!"
    return b

type Bar string

func provideBar(f Fooer) string {
    // f will be a *MyFooer.
    return f.Foo()

type test struct {
    f Fooer 
var Set = wire.NewSet(
    wire.Bind(new(Fooer), new(*MyFooer)),
// InitializeMasterRepo init repo
func testbuild() test  {
    return test{}

However, I am getting the following error

wire: D:\git\go\vendor.manager\src\lib\di\appbuild.go:50:5: **vendor.manager/lib/di.MyFooer does not implement vendor.manager/lib/di.Fooer
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    dongyi1015 dongyi1015 2019-06-05 20:32

    The type is wrong. Your receiver is *MyFooer; your value is (as the error says) **MyFooer. This is because you're calling new(*MyFooer); new already returns a pointer to the type passed, so since you're passing a pointer type to it, you're getting a pointer to a pointer.

    Change the line as follows to fix this error:

    wire.Bind(new(Fooer), new(MyFooer))
    点赞 评论 复制链接分享