Go语言没有动态代理? 本来想用AOP写框架,怎么实现才好

631768417 · · 19627 次点击
这个问题不大,就你说的内容不一定采取动态代理。需要的是[接口 + 调度策略 + 实现类]。 接口+调度策略解决耦合问题。代码节省方面,无论你是否是动态代理, 都是要实现具体的类的。因此不要局限于一个解决手段上。另外用golang,在大多情况下比java要节省资源,一台服务器上能支撑更多服务,节省资源。部署方面,单文件部署,不需要虚拟机,docker部署也不需要jdk环境只需要glib库,能够做得很小。这些都能节省成本。 比起动态代理,java在运行时能通过字节码操作,创建并加在类,这个才是静态语言的go没法解决的地方。但是这个功能在大多服务并不需要,在少数特殊平台上可以使用。
#6
更多评论
AOP不是基于java的interface么,go也有interface机制啊,go的interface机制比java强大。
#1
动态代理没那么简单,首先调用者只能看到接口,甚至本地计算机没有接口的实现.动态代理就是根据用户需要凭空生成一个对象,这个对象的实现是自动生成的,他的所有参数是根据接口匹配的,这个自动生成的对象会调用你指定配置的几个函数,吧调用者传递的参数传递给任何本地或者远程的实现.结果送来以后再给自动对象返回给调用者. 这种机制的好处是可以让调用者完全与实现隔离,调用者和实现者都不需要关注如何调用的.而具体如何调用可以在最后配置动态代理来决定. 比如同样的一个程序,加一个好的动态代理框架,你可以不修改一行代码,让这个个程序可以只在本地高速运行,可以在两台机器上分别运行客户端服务器端,甚至不修改代码就可以实现实现端的负载均衡,给客户端或者服务器端加缓存. 调用者就是调一个接口,实现者只实现了业务逻辑,而实际运行,可能是通过动态代理,转换成web service从远程调用的业务逻辑. 这里面最核心的技术就是动态生成可执行的java字节码,但是golang是机器码型语言又要跨平台的特性,难以解决不同硬件结构的问题.官方应该是不会去实现动态机器码生成的. 因此,我想golang是不会有动态代理功能
#2