私はfoobarと呼ばれるライブラリパッケージを持っているとします。クライアントコードを壊さずに大きなパッケージを分割するにはどうすればよいですか?
時間の経過とともに、大きくて重くなりました。ほとんどのクライアントは、どちらか一方だけを使用する必要があります -
幸いにも、それは分離可能だ、私は2つの別々のパッケージfooのとバーにその機能を分割して管理します。
私のライブラリは、多くのクライアントによってすでに使用されているので、互換性のために私はまだ両方fooのとバーで見つかった現在の機能へのプロキシとしてfoobarにパッケージを維持したいです。
Goでこれを達成するにはどうすればよいですか?頭に浮かぶ
一つの方法は、FOOとバーに各構造体/関数のfoobarににエイリアスを作成することです。 FOOがF()
とバーがB()
が定義されて定義されている場合ので、私はfoobarにでなければなりません:
var (
F = foo.F
B = bar.B
)
しかし、私は簡単に/クリーンな方法のために期待しています。
ありがとう、私はそれを恐れていました。残念ながら、これはソフトウェアが成長するにつれて自然現象であり、新しいバージョン(APIを壊す)を出すことは、私の場合を含めて多くの場合、コストがかかるソリューションです。 – Jan
は 'MyType foo.MyType'をタイプせず、' type OtherType bar.OtherType'は主に動作しますか?私はそれがメソッドとひどく干渉するのを見ることができます。 Hm。 – Vatine
@Vatineはい:すべてのメソッドが失われます。さらに、タイプスイッチとタイプアサートが失敗し、反射が壊れる可能性があります。そうです:いいえ、これは「ほとんど仕事」ではありません。 – Volker