there is a way i can do the base, but we still change old function due 
limit on go

https://gist.github.com/Petelin/a7bf8ccfd657536d46aaa355c6dc421a


在 2019年11月2日星期六 UTC+8下午4:50:22,林风写道:
>
> 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> 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. 
>> > 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/ad4658a5-c6a6-4cfb-ad48-95ce8ecbfa2b%40googlegroups.com.

Reply via email to