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语言 装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章

go语言 装饰器模式

Go语言之装饰器

[设计模式C++go]结构型模式:装饰器模式

[设计模式C++go]结构型模式:装饰器模式

[设计模式C++go]结构型模式:装饰器模式

GO设计模式10装饰器模式