go如何實現類似java的動態代理

CTO發表於2016-10-16

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);
                }
            }
        });
 } 
更多原創文章乾貨分享,請關注公眾號
  • go如何實現類似java的動態代理
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章