Go で分離を処理する最良の方法は、構造は似ているがサブキーが異なる 2 つの異なるパッケージを使用することです。このアプローチによりコードが効果的に分離され、保守性とモジュール性が向上します。ただし、構造内のサブアイテムが複雑になると、この分離アプローチが困難になる可能性があります。この場合、インターフェイスとポリモーフィズムの概念を使用して問題を解決することを検討してください。共通のインターフェイス タイプを定義することにより、異なる構造タイプを均一に処理できるため、より柔軟なデカップリング方法が実現します。このアプローチは、コードの拡張性と再利用性を高めるために Go で広く使用されています。
質問の内容
私はこれに比較的慣れたばかりで、依存関係グラフをできる限り減らすために大規模な書き直しを行っています。購入したところには非常に満足していますが、どのように扱うのが最善かわからない部分が 1 つあります。答えが「両者の間には依存関係があるだろう」というものであれば、それも問題ありません。私は奇跡を期待するのではなく、ただ良いアプローチを探しているだけです。
したがって、以下には a
と b
という 2 つのパッケージがあり、どちらも同じ構造を持っています。通常、 main で一方を他方に変換できますが、それぞれには構造体でもある子があり、子が同じ署名を持っている場合でも、 go はそれを許可できません。
1 つの方法は、b の構造内で a.tzconfig を参照し、依存関係を持たせることですが、それを削除したいと考えています。
別の方法は、インターフェイスを作成してから、メソッドを介して loc の値を取得することだと思います。これは機能すると思いますが、単なるものに対してメソッドを作成することになるため、まだ試していません。データ構造 (実際の構造には多くの項目が含まれていますが、ここではわかりやすくするために項目を最小限に抑えています)、これはやりすぎのように思えます。
tzconfig を 3 番目のモジュールに移動して、一方が他方を参照するのではなく、両方がそのモジュールを参照するようにすることができます。それが私が考えたものです。
そこで私の質問は、実際の経験を持つ人からの質問ですが、Go でこの状況に対処する最善の方法は何ですか?
構造体を複製する理由は、それらの間の依存関係を解消しようとしているだけであることを述べておく必要があります。元のコードでは、一方のパッケージに構造体があり、もう一方のパッケージがそれを参照しているだけです。
リーリー リーリーpackage a type cfg struct { addr string loc tzconfig } type tzconfig struct { string string tz *time.location `validate:"nodescent"` } func getcfg() cfg { t, _ := time.loadlocation(`mst`) return cfg{ addr: "abc", host: "a.bc.d", loc: config.tzconfig{ string: "mst", tz: t, }, } }
Solution
私見ですが、@burakserdar が提供するアドバイスは非常に優れており、あなたのシナリオに非常に適しています。コードをこのように書き直しました。
パッケージ共通
リーリー
一般的に使用される構造体、関数、メソッドなどをここに配置します。
パッケージ
#
リーリー
これは、import セクションで示されているように、
common パッケージから共有コードを継承する
a パッケージに関連する特定のコードです。
common 共有フィールドを取得するために構造体埋め込み機能を使用していることに注意してください。
パッケージb
リーリー
ここでは特に言及する価値のあるものは何もありません。
パッケージメイン
リーリー
ここで、コードは非常に単純である必要があります。 a および
b パッケージをインポートして、その機能を利用しました。
以上がGo でデカップリングを処理する最善の方法は、2 つの異なるパッケージで同様の構造を使用することですが、構造内の子がそれを困難にしています。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

開発者は、次のベストプラクティスに従う必要があります。1。ゴルチンを慎重に管理して、リソースの漏れを防ぎます。 2。同期にチャネルを使用しますが、過剰使用を避けます。 3。同時プログラムのエラーを明示的に処理します。 4. GomaxProcsを理解して、パフォーマンスを最適化します。これらのプラクティスは、リソースの効果的な管理、適切な同期の実装、適切なエラー処理、パフォーマンスの最適化を確保し、それによりソフトウェアの効率と保守性を向上させるため、効率的で堅牢なソフトウェア開発には重要です。

goexcelsinproductionduetoitsperformanceandsimplicity、butrequirescarefulmanagement of sscalability、errorhandling、andresources.1)dockerusesgofores goforesesgorusesgolusesgotainermanagement.2)uberscalesmicroserviceswithgo、facingchallengesinservicememameme

標準のエラーインターフェイスが限られた情報を提供し、カスタムタイプがコンテキストと構造化された情報を追加できるため、エラータイプをカスタマイズする必要があります。 1)カスタムエラータイプには、エラーコード、場所、コンテキストデータなどを含めることができます。2)デバッグ効率とユーザーエクスペリエンスを改善する3)ただし、その複雑さとメンテナンスコストに注意する必要があります。

goisidealforbuildingscalablessystemsduetoitssimplicity、効率性、およびビルド・インコンカレンシsupport.1)

intionSingOrunautomaticallyは()andareuseforstingupenments andinitializingvariables.usemforsimpletasks、回避効果を回避し、測定可能性を測定することを検討します。

goinitializeSpackages intheordertheyareimport extionsitions withinitionsiteintheirdefinition ordord、およびfilenamesdetermineTheOordCrossMultiplefiles.thisprocesccanbeandeanded by -dependenciessedieSiesは、このマイレアドカンフレシニティン化の対象となります


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック









