2015-04-02 57 views
0

我有这个应用程序,其中请求根据结构中的字符串进行过滤,并执行不同的功能。Golang静态与对象的动态绑定

我的方法是有一个Map将字符串映射到函数指针并执行它们。然而,这种方法正在被想要通过反思进行过滤的队友所主张。我们使用Go,它用于监控我们网站的活动。

队友的方法:使用反射来切换基于字符串的对象,将字符串传递给函数并让函数调用相关函数。 我的方法:从字符串到函数的简单映射

任何帮助表示赞赏。

+1

简单是最好的。但唯一确定的方法是基准。试试他们两个并比较。 – jimt 2015-04-03 00:31:21

+1

我敢打赌,解码到预定义的结构比反射快(但当然在决定之前进行测量)。另外,不要忘记你的结构体定义不必覆盖* everything *,你可以只包含你需要考虑的文档部分,其余部分将被解码器忽略。 – maerics 2015-04-03 01:06:11

+0

@maerics:很酷。我会考虑的! – premunk 2015-04-03 16:58:48

回答

3

基于反射的自动发现的不足之处在于,您永远不得不小心添加到系统中的内容,因为它可以自动提取。

vs map方法,你需要明确地公开每个函数。

反射更确切地说是更酷和自动的魔法。但是,自动魔法并不能很好地保证安全性或长期可维护性。

另外,如果您尝试注册一个不匹配的函数,map [string] func(带特定签名)将不会编译。

在哪里你会发现与反思的东西,然后思考为什么它是一个运行时失败。

+1

通过反射调用函数的速度比通过func指针慢100倍。 – OneOfOne 2015-04-03 06:11:31