gpt4 book ai didi

go - Golang中每个函数调用的Pre和Post函数

转载 作者:行者123 更新时间:2023-12-01 20:23:22 24 4
gpt4 key购买 nike

我想对每个功能执行一些常见操作。在函数开始之前和函数结束之前。

func Command1Processor() error {
preCheck()
// Actual command1 logic
postCheck()
}

func Command2Processor() error {
preCheck()
// Actual command2 logic
postCheck()
}

GoLang中有什么支持此功能的,以便我只编写逻辑,并且自动调用pre/post函数。

最佳答案

您可以使用中间件模式来实现此目的,该中间件模式在HTTP处理程序中非常流行。

您需要一个通用的中间件功能,例如

func withCheck(http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
preCheck()
h.ServeHTTP(w, r)
postCheck()
})
}

然后,您可以通过将处理程序另外包装到 withCheck中间件中来连接处理程序:
myHandler := newMyHandler()
http.Handle("/foo", withCheck(myHandler))

这样,将在每个处理程序调用之前和之后调用 preCheckpostCheck

对于不带参数的命令处理器,示例如下所示:
type CommandProcessor func()

func withCheck(cp CommandProcessor) CommandProcessor {
return CommandProcessor(func() {
preCheck()
cp()
postCheck()
})
}

func CommandProcessor1() {
// Actual logic
}

func main() {
cp1 := withChecker(CommandProcessor1)
}

这种方法的优点是您可以拥有多个中间件。这种模式很容易适应任何数量的参数和/或函数结果。

关于go - Golang中每个函数调用的Pre和Post函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60035075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com