Go 依赖注入实用指南
package main
import (
"fmt"
"github.com/facebookgo/inject"
)
// 定义一个接口
type Greeter interface {
Greet() string
}
// 实现接口的结构体
type EnglishGreeter struct{}
// EnglishGreeter实现了Greet方法
func (g EnglishGreeter) Greet() string {
return "Hello!"
}
// 使用injector进行依赖注入的示例函数
func GreetWithInjector(injector inject.Injector, name string) (string, error) {
var greeter Greeter
if err := injector.Invoke(func(g Greeter) {
greeter = g
}); err != nil {
return "", err
}
return greeter.Greet() + " " + name, nil
}
func main() {
// 创建injector并注册EnglishGreeter
injector := inject.New()
injector.Register(&EnglishGreeter{})
// 使用injector进行依赖注入
greeting, err := GreetWithInjector(injector, "World")
if err != nil {
fmt.Println("Error:", err)
return
}
// 输出结果
fmt.Println(greeting)
}
这段代码首先定义了一个Greeter
接口和一个实现了该接口的EnglishGreeter
结构体。然后定义了一个使用inject.Injector
进行依赖注入的示例函数GreetWithInjector
。在main
函数中,创建了一个inject.Injector
实例,并注册了一个EnglishGreeter
的实例。接着,使用GreetWithInjector
函数进行依赖注入,并输出结果。这个例子展示了如何使用依赖注入来简化代码和提高模块化程度。
评论已关闭