Golang 中的装饰器函数模式
go programmingserver side programmingprogramming
装饰器函数模式是一种主要存在于 Python 和 JavaScript 中的模式,但我们也可以在 Golang 中使用它。
这是一种模式,我们可以通过包装当前函数来添加自己的功能。由于 Golang 中的函数被视为一等对象,这反过来意味着我们可以像在变量的情况下一样将它们作为参数传递。
示例 1
让我们从一个非常简单的示例开始,以了解将函数作为参数传递给现有函数的基本情况。
考虑下面显示的代码。
package main import ( "fmt" "time" ) func printFunc() { fmt.Println("TutorialsPoint") time.Sleep(time.Second) } func main() { fmt.Printf("Data Type: %T\n", printFunc) }
输出
如果我们在上述代码上运行命令 go run main.go,我们将在终端中获得以下输出。
数据类型:func()
示例 2
上述示例显示了我们可以随后将函数作为参数传递的情况,现在让我们看一个简单的装饰器模式函数。
考虑下面显示的代码。
package main import ( "fmt" "time" ) func printFunc() { fmt.Println("TutorialsPoint") time.Sleep(1 * time.Second) } func coolFunc(sample func()) { fmt.Printf("Beginning: %s\n", time.Now()) sample() fmt.Printf("Ending: %s\n", time.Now()) } func main() { fmt.Printf("Data Type: %T\n", printFunc) coolFunc(printFunc) }
在上面的代码中,我们有一个简单的装饰器模式,我们将一个名为 printFunc() 的函数作为参数传递给名为 coolFunc() 的函数,该函数在调用时将自动调用 printFunc(),从而调用装饰器模式。
上面的例子展示了如何有效地包装原始函数,而不必改变其实现。
输出
如果我们在上面的代码上运行命令 go run main.go,我们将在终端中获得以下输出。
Data Type: func() Beginning: 2021-11-01 06:59:13.490709501 +0000 UTC TutorialsPoint Ending: 2021-11-01 06:59:14.490865087 +0000 UTC