依赖注入
背景说明
tip
积分系统中,算分的时候,依赖底层数据库查找所有详情的内容,如果在每个task对应想法中去实现的话,需要把数据库对象传给task对象方法
但是那样做的话,就把数据库和任务耦合了,算分的动作本身并不依赖数据库,如果此任务类型,需要用到数据库数据才会去调用。
因此,把数据库方法注入到这个算分的方法中是比较好的一个选择。
典型代码
package main
import (
"fmt"
)
// 定义一个函数类型
type CallbackFunc func(int) string
// ExampleMethod 方法接受一个可选的回调函数
func ExampleMethod(callback CallbackFunc) {
// 模拟一些逻辑
result := 42
// 判断是否提供了回调函数
if callback != nil {
// 调用回调函 数并传参
fmt.Println("Callback result:", callback(result))
} else {
// 没有提供回调函数,直接处理
fmt.Println("No callback provided, result:", result)
}
}
func main() {
// 定义一个回调函数
callback := func(result int) string {
return fmt.Sprintf("Processed result: %d", result)
}
// 调用 ExampleMethod 并传入回调函数
ExampleMethod(callback)
// 调用 ExampleMethod 不传入回调函数
ExampleMethod(nil)
}
输出
Callback result: Processed result: 42
No callback provided, result: 42
优缺点
灵活性:可以在运行时根据需要传入不同的回调函数,改变方法的行为。 解耦:方法不需要知道具体的回调逻辑,只需要知道如何调用回调函数。 可扩展性:可以轻松添加新的回调逻辑,而不需要修改方法本身。
应用场景
事件处理:在事件发生时调用回调函数处理事件。 策略选择:根据不同的条件选择不同的处理策略。 异步编程:在异步操作完成时调用回调函数处理结果。 这种模式在 Go 中非常常见,特别是在处理异步事件、网络请求回调等场景中。 它提供了一种简单而有效的方式来实现高度灵活和可配置的代码结构。