Contents

Go Wire

Contents

Go Wire

wire是 Google 开源的一个依赖注入工具。它是一个代码生成器,并不是一个框架。我们只需要在一个特殊的go文件中告诉wire类型之间的依赖关系,它会自动帮我们生成代码,帮助我们创建指定类型的对象,并组装它的依赖。

使用:

go get github.com/google/wire/cmd/wire

wire 示例:

定义结构体和方法一般结构

package handler

import (
	"fmt"
	"wire-example/config"
	"wire-example/service"
)

type UserHandler struct {
	Service *service.UserService
	Cfg     *config.Cfg
}

func NewUserHandler(s *service.UserService, cfg *config.Cfg) *UserHandler {
	return &UserHandler{Service: s, Cfg: cfg}
}

func (h *UserHandler) HandleRequest(id int) {
	fmt.Println("Handling user:", h.Service.GetUser(id))
	fmt.Println(h.Cfg.Name)
}
func InitializeHandler(cfg *config.Cfg) *handler.UserHandler {
	wire.Build(
		repo.NewUserRepository,
		service.NewUserService,
		handler.NewUserHandler,
	)
	return nil
}