使用 Google Wire 在 Go 中进行依赖注入
package main
import (
"fmt"
"github.com/google/wire"
)
// 定义依赖的接口
type GreetingService interface {
Greet(name string) string
}
// 实现接口的结构体
type englishGreetingService struct{}
// Greet 实现了英文问候语
func (s *englishGreetingService) Greet(name string) string {
return "Hello, " + name + "!"
}
// 定义提供者函数,用于创建GreetingService实例
func NewEnglishGreetingService() GreetingService {
return &englishGreetingService{}
}
// 定义服务的使用者接口
type Printer interface {
PrintGreeting(name string)
}
// 实现使用者结构体
type greetingPrinter struct {
service GreetingService
}
// PrintGreeting 调用 GreetingService 的 Greet 方法打印问候语
func (p *greetingPrinter) PrintGreeting(name string) {
fmt.Println(p.service.Greet(name))
}
// 定义提供者函数,用于创建greetingPrinter实例
func NewGreetingPrinter(service GreetingService) Printer {
return &greetingPrinter{service: service}
}
// 初始化函数,用于组装依赖关系
func InitializePrinter() Printer {
wire.Build(NewEnglishGreetingService, NewGreetingPrinter)
return nil
}
func main() {
// 使用 wire 生成的代码初始化 Printer 实例
printer := InitializePrinter()
if printer != nil {
printer.PrintGreeting("World")
}
}
这个代码示例展示了如何使用Google Wire来简化Go语言中的依赖注入过程。首先定义了服务的接口和实现,然后通过Wire库的提示注释来生成依赖注入的代码。最后在main函数中通过调用InitializePrinter函数来初始化并使用服务。这个过程使得代码的依赖关系变得清晰,有助于代码的维护和测试。
评论已关闭