On Sat, Nov 2, 2019 at 12:20 AM 林风 <petelin1...@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 golang-nuts+unsubscr...@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/CAMV2RqrD6k9LDdQOvydXjPbHKvSZG-igyPQ5m8GYX4mGE1NXPQ%40mail.gmail.com.

Reply via email to