一 安装
go get github.com/google/wire/cmd/wire

或者go install 也可以
然后在 G O P A T H / b i n 会 有 一 个 二 进 制 文 件 放 在 GOPATH/bin 会有一个二进制文件 放在 GOPATH/bin会有一个二进制文件放在PATH下面就可以了

项目启动初始化过程中 会依赖很多库包,自己写会导致库的循环引用 用wire 可以避免循环引用以及依赖缺失

二 简单使用

//main.go
package main


// repo

// IPostRepo IPostRepo
type IPostRepo interface{}

// NewPostRepo NewPostRepo
func NewPostRepo() IPostRepo {
	return new(IPostRepo)
}

// usecase

// IPostUsecase IPostUsecase
type IPostUsecase interface{}
type postUsecase struct {
	repo IPostRepo
}

// NewPostUsecase NewPostUsecase
func NewPostUsecase(repo IPostRepo) IPostUsecase {
	return postUsecase{repo: repo}
}

// service service

// PostService PostService
type PostService struct {
	usecase IPostUsecase
}

// NewPostService NewPostService
func NewPostService(u IPostUsecase) *PostService {
	return &PostService{usecase: u}
}


//wrie.go
//+build wireinject

package main

import "github.com/google/wire"

func GetPostService() *PostService {
	panic(wire.Build(
		NewPostService,
		NewPostUsecase,
		NewPostRepo,
	))
}

wire . 
#用于生成gen文件

//wire-gen.go
// Code generated by Wire. DO NOT EDIT.

//go:generate go run github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject

package main

// Injectors from wrie.go:

func GetPostService() *PostService {
	iPostRepo := NewPostRepo()
	iPostUsecase := NewPostUsecase(iPostRepo)
	postService := NewPostService(iPostUsecase)
	return postService
}