Hi, thanks for your answer, and i really cannot understander your code. can you write a more clear version in go play ground? i already create a template. pls notice that we cannot change origin fib function. https://play.golang.org/p/hYerZ2fv0dT
在 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/3a0ad2fb-876c-449e-9de1-d0eb29957c85%40googlegroups.com.