Go 语言中的装饰器函数模式


装饰器函数模式是一种主要在 Python 和 JavaScript 中发现的模式,但我们也可以在 Go 语言中使用它。

它是一种模式,我们可以通过包装来在当前函数上添加我们自己的功能。由于 Go 语言中的函数被认为是一等公民,这意味着我们可以像处理变量一样将它们作为参数传递。

示例 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**,我们将在终端中获得以下输出。

Data Type: 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

更新于: 2021年11月1日

911 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.