Go でのインポート サイクルの中断
Go で開発している場合、あるパッケージが別のパッケージに依存するインポート サイクルが発生することがあります。最初のものに依存します。この状況は、パッケージが複雑に絡み合い、循環依存関係につながる場合に発生します。
特定のサイクル
次の例を考えてみましょう:
view.go では、doThings メソッドは action.Register マップにアクセスしようとします。アクションはビューに依存するため、サイクルが作成されます。各パッケージが他のパッケージの機能にアクセスする必要があるため、この状況は特に困難です。
サイクルの解決
1.依存関係の分析:
パッケージ間の中心的な関係を特定し、サイクルの原因となる特定の依存関係を特定します。この場合、ビューはビュー操作のアクション パッケージに依存しますが、アクションはビュー タイプにアクセスする必要があります。
2.抽象化の導入:
依存関係を分離するために抽象化レイヤーの導入を検討してください。 1 つのアプローチは、両方のパッケージが実装する中間インターフェイスを作成することです。これにより、直接の依存関係なしで通信できるようになります。
3.コードのリファクタリング構成:
独立したモジュールに依存するようにパッケージを再構成します。たとえば、action.Register マップと View タイプの両方を含む新しいパッケージを作成します。アクション パッケージとビュー パッケージは両方ともこの共通モジュールに依存します。
4.インジェクション:
インポートを介してオブジェクトまたはパッケージに直接アクセスする代わりに、オブジェクトまたはパッケージに依存関係を注入します。この技術により密結合が防止され、柔軟性とテスト容易性が可能になります。たとえば、ビュー パッケージはコンストラクターへの引数としてインターフェイスを受け取り、アクション パッケージによって実装できます。
一般原則
インポート サイクルを回避するにはGo では、次の原則を考慮してください:
以上がGo でインポート サイクルを断ち切る方法: 循環依存関係を解決するためのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。