一 安装
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
}