you may say i can write a fib2 which have fib1+counter. but that is really 
bad way to write code. and that's why we need decorator. 

在 2019年11月2日星期六 UTC+8下午2:30:33,burak serdar写道:
>
> On Sat, Nov 2, 2019 at 12:20 AM 林风 <petel...@gmail.com <javascript:>> 
> wrote: 
> > 
> > let's say i have a function or method to get fib 
> > 
> > func fib(n int){ 
> >   ... 
> >   return fib(n-1) + fib(n-2) 
> > } 
> > 
> > 
> > now i want to add a counter to track how many times i have called to 
> fib. 
> > 
> > in python or jave i can easy use `decorator patten` to do it. 
> > 
> > but in go, you can not change fib since it is a function. if you define 
> fib as a method, you cannot do it either since go did not have `Inherited`. 
> you cannot call father class. 
> > 
> > so golang did not support such thing? can we just reflect to do so? 
>
>
> There is no built-in way to do that. I don't think you can do that 
> with reflect either. However, if you need such decorators, you can use 
> an interface or a function pointer: 
>
> type fib interface { 
>    fib(int) int 
> } 
>
> func f(in fib) { 
>    in.fib(...) 
> } 
>
> You can pass in an implementation of fib that will do whatever you want. 
>
> With a function pointer: 
>
> func f(fib func(int) int) { 
>    fib(...) 
> } 
>
> And if you need to count how many times f calls fib: 
>
> ... 
> count:=0 
> f(func(in int) int { 
>    count++ 
>    return originalFib(in) 
>   } 
> } 
>
>
>
> > 
> > 
> > 
> > 
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "golang-nuts" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to golan...@googlegroups.com <javascript:>. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/84685fb5-8657-4f57-94f1-4b444d722976%40googlegroups.com.
>  
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/ffb47a51-cf8f-47e8-9789-389d291388f2%40googlegroups.com.

Reply via email to