2016-03-29 43 views
2

比方說,我有一個名爲foobar的庫包。如何拆分大包而不破壞客戶端代碼?

隨着時間的推移它變得又大又沉重。

幸運的是這可分離,我設法其功能拆分爲兩個獨立的包酒吧 - 大多數客戶端只需要使用一個或另一個。

由於我的圖書館已在使用的許多客戶,兼容性我還是想保持foobar的包作爲一個代理在兩個FOO酒吧發現目前的功能。

在Go中如何實現這一點?浮現在腦海

一種方法是在foobar的每個結構/功能FOO酒吧創建別名。所以,如果定義F()酒吧定義B(),我會在foobar的

var (
    F = foo.F 
    B = bar.B 
) 

但我希望有一個更容易/清潔的方式。

回答

6

創建別名包是唯一的方法。 但是,您的嘗試可能不會工作:它只適用於函數和變量以及常量,但不適用於類型。對於你需要在foobar中複製類型的類型。

我不會這樣做。只需在版本1中添加foobar,並使用foo和bar重新開始(可能直接在版本2中)。

+0

謝謝,我很害怕這個。這很不幸,因爲隨着軟件的發展,這是一種自然現象,並且在包括我的許多情況下,出現新版本(破壞API)是一個成本太高的解決方案。 – Jan

+0

不會'輸入MyType foo.MyType'和'輸入OtherType bar.OtherType'主要工作?雖然我可以看到,嚴重干擾方法。嗯。 – Vatine

+0

@Vatine是的:所有的方法都丟失了。另外:類型開關和類型斷言會失敗,反射可能會中斷。所以:不,這不是「主要工作」。 – Volker

相關問題