go语言 装饰器模式
Posted w3liu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言 装饰器模式相关的知识,希望对你有一定的参考价值。
package decorator
import (
"fmt"
"reflect"
)
func Decorator(decoPtr, fn interface) (err error)
var decoratedFunc, targetFunc reflect.Value
decoratedFunc = reflect.ValueOf(decoPtr).Elem()
targetFunc = reflect.ValueOf(fn)
v := reflect.MakeFunc(targetFunc.Type(),
func(in []reflect.Value) (out []reflect.Value)
fmt.Println("before")
out = targetFunc.Call(in)
fmt.Println("after")
return
)
decoratedFunc.Set(v)
return
package decorator
import (
"fmt"
"testing"
)
func foo(a, b, c int) int
fmt.Printf("%d, %d, %d \n", a, b, c)
return a + b + c
func bar(a, b string) string
fmt.Printf("%s, %s \n", a, b)
return a + b
func TestDecorator(t *testing.T)
//type MyFoo func(int, int, int) int
//var myfoo MyFoo
//Decorator(&myfoo, foo)
//myfoo(1, 2, 3)
mybar := bar
Decorator(&mybar, bar)
mybar("hello,", "world!")
以上是关于go语言 装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章