go如何实现类似java的动态代理

java的动态代理还是很强大的,go有办法实现类似的动态代理吗

下面的代码用来代理一个实现了List接口的对象。所实现的功能也非常简单,那就是禁止使用List接口中的add方法。如果在getList中传入一个实现List接口的对象,那么返回的实际就是一个代理对象,尝试在该对象上调用add方法就会抛出来异常。

public List getList(final List list) {
    return (List) Proxy.newProxyInstance(DummyProxy.class.getClassLoader(), new Class[] { List.class },
        new InvocationHandler() {
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if ("add".equals(method.getName())) {
                    throw new UnsupportedOperationException();
                }
                else {
                    return method.invoke(list, args);
                }
            }
        });
 } 
已邀请:

godonggua - java,go爱好者

赞同来自: tangyumeng

go的 reflect包 可以 帮助到您, 我也是做java的,动态代理确实是个非常棒的功能,动态代理实际上就是一个代理类可以代理任何class,然后通过反射来调用class的方法。
go的reflect包 有个 call函数,您研究一下 应该是可以实现动态代理的

astaxie - 创造、获取、分享、传播和应用Go

赞同来自:

不懂Java是什么,你想干什么吧,才能更好的回答你

caoqianli - Programing

赞同来自:

动态代理是为每个被代理类动态生成了一个代理类,每个方法可以直接调用被代理类的方法,也可以按创建时指定的规则调用别的代码。 golang 现在是不好做到类似java 的动态代理功能的。每个语言有自己解决问题的方式,java 中用动态代理解决的问题golang 可以用其他的方法来解决。

zhr

赞同来自:

约等于 Php 里的魔术方法 __call()

挖坟了。。我也在找,不知道楼主最后怎么弄的

要回复问题请先登录注册