Golang 依赖注入设计哲学|12.6K 的依赖注入库 wire
package main
import (
"github.com/google/wire"
)
// 定义接口
type Greeter interface {
Greet() string
}
// 实现接口的具体类型
type EnglishGreeter struct{}
// EnglishGreeter 实现 Greeter 接口
func (EnglishGreeter) Greet() string {
return "Hello!"
}
// 定义 provider 函数,用于创建 Greeter 实例
func NewEnglishGreeter() Greeter {
return EnglishGreeter{}
}
// 定义 injector 函数,使用 wire.Bind 绑定接口与实现
func InitializeGreeter() Greeter {
wire.Build(NewEnglishGreeter)
return nil
}
func main() {
// 使用 wire 生成代码来初始化 Greeter 实例
// 这里的代码会在编译时执行,自动绑定接口与实现
greeter := InitializeGreeter()
println(greeter.Greet()) // 输出: Hello!
}
这段代码首先定义了一个 Greeter
接口和一个实现该接口的 EnglishGreeter
结构体。然后,它定义了一个 NewEnglishGreeter
函数作为 provider,用于创建 Greeter
实例。最后,它定义了一个 InitializeGreeter
函数,使用 wire 包来声明依赖并绑定接口与实现。在 main
函数中,它演示了如何使用 wire 生成的代码来初始化并使用 Greeter
实例。
评论已关闭