使用google/wire进行依赖注入

  • 接下来,在一个名为wire的单独文件中。我们将定义InitializeEvent。这就是事情变得有趣的地方:

    // wire.go
    
    func InitializeEvent() Event {
        wire.Build(NewEvent, NewGreeter, NewMessage)
        return Event{}
    }

    与其依次初始化每个组件并将其传递给下一个组件,不如使用一个连接调用。构建传递我们想要使用的初始化器。在Wire中初始化器被称为“提供者”,即提供特定类型的函数。我们为事件添加一个零值作为返回值,以满足编译器的要求。注意,即使我们向事件添加值,Wire也会忽略它们。事实上,注入器的目的是提供关于使用哪些提供者来构造一个事件的信息,因此我们将在文件顶部的build约束中把它从最终的二进制代码中排除掉:

    //+build wireinject
    
    

    类似

    //+build wireinject // The build tag makes sure the stub is not built in the final build. package main