質問: Goプログラミング言語には、Node.jsのモジュールやpythonのパッケージと同等のものがありますか? Rubyの`gems`と同等のものを探しています。
回答: 大前提として、「モジュール」や「パッケージ」という言葉でどういう機能が欲しいのかを区別してください。大雑把に言うと、ファイル単位などで名前空間のついたソースコードが欲しいのか、それに加えて依存関係やバージョンなどのメタ情報もついたプロジェクトが欲しいのか、といった違いがあります。「モジュール」や「パッケージ」がそれぞれ何を指しているかは言語によって異なるので、欲しい機能を明文化することが大事です。「ライブラリ」という言葉を使う言語もあります。 **その上で、Go において第一に大事な概念は「パッケージ」です。** Go のプログラムは最初に `package main` のようにパッケージの名前を宣言し、これによって名前空間を分割します。パッケージ名の書かれたソースコード群を適切に 1 つのフォルダ下にまとめるだけで、そのパッケージを `import` したり `go get` したりできるようになっています。 ただし Go のパッケージには、Node.js の package.json や Python / pip の requirements.txt のように依存関係のバージョン管理をする機能は付いていません。これは Go の文化に由来する、意図された制限です。 **バージョン管理まで含めたライブラリ構造が欲しい場合、「モジュール」(vgo) を使ってください。** Go の歴史において、依存関係のバージョン管理問題には、様々なサードパーティー製の解決策が提案されてきました。そして Go 1.11 からは公式に「モジュール」が導入され、バージョン情報まで含めた依存関係管理のやり方が確立されました。これは Node.js や Python / pip の「パッケージ」に似た概念ですが、細かい所では依存関係解決のされ方が異なり、minimal version selection が採用されています。詳しくはモジュールの解説をご覧ください: