我给题主一个思路,既然在Go里面一切皆值。可以给函数添加 Name方法和Pointer方法来获得函数的名字和地址。 这样的方式可能要多费点代码量。
这是我给的例子:
https://play.golang.org/p/-iTn568w6u为了减少重复的劳动我比较喜欢code generation, 我个人不喜欢反射,而且我目前一直坚持自动代码生成来替代范型。
楼上有人提出说要来个benchmark,这里我提供一个参考。
我魔改的cache,把所有的反射用代码生成替代。
GitHub - ggaaooppeenngg/cachemap: An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications, code is auto generated instead of reflection.BenchmarkIncrementInt
10000000,167 ns/op (go-cache)
20000000, 84.0 ns/op (cachemap)
有反射的反复Get并且单增一个数字和用代码生成的纯int单增的差别,大概可以差一倍。虽然是80ns/op,我觉得并不是一个不可以提升的量。