如何解决如何将参数传递给装饰函数?
我想写一个装饰器来用“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 举报,一经查实,本站将立刻删除。