微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将参数传递给装饰函数?

如何解决如何将参数传递给装饰函数?

我想写一个装饰器来用“before”和“after”命令包装一个函数。下面是第一个版本,其中装饰函数输出 <pre id='price' class="container"></pre>

hello

(游乐场:https://play.golang.org/p/vJuQKWpZ2h9

我现在想用一个参数(在我的例子中是 package main import "fmt" func main() { wrapper(printHello,"world") } func wrapper(f func(),who string) { fmt.Printf("before function,sending %v\n",who) f() fmt.Print("after function\n") } func printHello() { fmt.Printf("hello\n") } )来调用装饰函数。在上面的例子中,它成功地传递给 "world" 但我不知道下一步该怎么做。我以为我只是

wrapper()

编译失败

package main

import "fmt"

func main() {
    wrapper(printHello,"world") // cannot use printHello as the type func()
}

func wrapper(f func(),who)
    f(who) // too many arguments
    fmt.Print("after function\n")
}

func printHello(who string) {
    fmt.Printf("hello %v\n",who)
}

将参数传递给装饰函数的正确方法是什么?

解决方法

您必须声明正确的变量类型才能使其工作:

func wrapper(f func(string),who string) {
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。