1744741082
2025-04-15 18:14:00
Go、現代のプログラミング言語のミニマリストの最愛の人は、シンプルさと効率を約束しました。 Go 1.11で導入されたそのモジュールシステムは、依存関係管理の問題の解決策として歓迎されました。しかし、誇大広告を切り抜けましょう。Goモジュールは腹立たしい迷路になる可能性があります。バックルアップ – これが、GOモジュールが壁を駆け上がっている理由です。
モジュールの前に、GOの依存関係管理は、GoPathハッキングとDEPなどのベンダーリングツールのワイルドな西でした。モジュールは、バージョンされた依存関係、再現可能なビルド、カオスからのきれいな休憩など、注文をもたらすことになっていた。 go.modファイルとGo Getなどのコマンドを使用すると、プロジェクトの依存関係を管理するための整然とした予測可能な方法があります。夢のように聞こえますよね?ネタバレ:そうではありません。
これが悪夢の始まりです:
- バージョン化カオス
GOモジュールはセマンティックバージョン(SEMVER)に大きく傾いていますが、すべてのライブラリがうまく機能するわけではありません。依存関係の「マイナー」アップデートが壊れた変更を導入したため、ビルドが壊れているのを見つけるためだけに実行されますか? Semverは規律を想定していますが、オープンソースの世界は自由です。あなたは手動でバージョンをピン留めしているか、上流の祈りを祈って彼らの混乱を修正します。 - 最小バージョン選択(MVS):サイレントサボター
GOのMVSアルゴリズムは、すべての要件を満たす依存関係の最低バージョンを選択します。論理的に聞こえます – そうでないまで。 2つのパッケージが同じライブラリの異なるバージョンに依存している場合、MVSは古いバージョンを選択し、バグまたは機能が不足している場合があります。アップグレードしたいですか?他の何かを壊すことなく、依存関係グラフを解く頑張ってください。 - プロキシの問題
GOモジュールは、依存関係を取得するためにproxy.golang.orgなどのプロキシに依存しています。しかし、プロキシがダウンしている場合、またはあなたの会社のファイアウォールがそれをブロックするとどうなりますか?アテネのようなプライベートプロキシを設定しない限り、あなたは立ち往生しています。そして、Goprivateを始めないでください – それを誤解してください、そしてあなたは内部コードを漏らしたり、認証の範囲に固執しています。 - 推移的依存関係地獄
あなたはライブラリAに依存します。これはbに依存します。
#Goモジュールは悪夢ですあなたが閉じ込められている依存関係です #abhinav #2025年4月