一、wire
Wire 是一个代码生成工具,它使用依赖注入自动连接组件。
二、快速使用
2.1 引入依赖
go get github.com/google/wire
go install github.com/google/wire
2.2 demo教程
2.2.1 结构体定义
type A struct {
}
type B struct {
}
type AB struct {
a A
b B `wire:"-"` //b字段忽略注入
}
func NewAB(a A) *AB { // AB字段自定义创建方法
res := &AB{a: a}
return res
}
2.2.2 依赖注入定义
wire.go
//go:build wireinject
// +build wireinject
package main
import (
"github.com/google/wire"
)
var providerSet = wire.NewSet(
wire.Struct(new(A)), // 字段构造
wire.Struct(new(B)),
NewAB, // 自定义构造
)
func initialAB() *AB {
panic(wire.Build(providerSet))
}
2.2.3 运行wire指令,生成对应结果文件
wire_gen.go
// Code generated by Wire. DO NOT EDIT.
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject
package main
import (
"github.com/google/wire"
)
// Injectors from wire.go:
func initialAB() *AB {
a := A{}
ab := NewAB(a)
return ab
}
// wire.go:
var providerSet = wire.NewSet(wire.Struct(new(A)), wire.Struct(new(B)), NewAB)
2.2.4 使用wire生成结果
func main() {
ab := initialAB()
fmt.Println(*ab)
}