52576


Goプログラミング言語には、Node.jsのモジュールやpythonのパッケージと同等のものがありますか？  
Rubyの`gems`と同等のものを探しています。


CC BY-SA 4.0
2019-02-05T04:22:50.343
52553
2019-02-06T00:08:27.127
2019-02-05T23:29:17.253
19110
30795
question
go
Goプログラミング言語用のモジュール


大前提として、「モジュール」や「パッケージ」という言葉でどういう機能が欲しいのかを区別してください。大雑把に言うと、ファイル単位などで名前空間のついたソースコードが欲しいのか、それに加えて依存関係やバージョンなどのメタ情報もついたプロジェクトが欲しいのか、といった違いがあります。「モジュール」や「パッケージ」がそれぞれ何を指しているかは言語によって異なるので、欲しい機能を明文化することが大事です。「ライブラリ」という言葉を使う言語もあります。

**その上で、Go において第一に大事な概念は「パッケージ」です。** Go のプログラムは最初に `package main`
のようにパッケージの名前を宣言し、これによって名前空間を分割します。パッケージ名の書かれたソースコード群を適切に 1
つのフォルダ下にまとめるだけで、そのパッケージを `import` したり `go get` したりできるようになっています。

ただし Go のパッケージには、Node.js の package.json や Python / pip の requirements.txt
のように依存関係のバージョン管理をする機能は付いていません。これは Go の文化に由来する、意図された制限です。

**バージョン管理まで含めたライブラリ構造が欲しい場合、「モジュール」(vgo) を使ってください。** Go
の歴史において、依存関係のバージョン管理問題には、[様々なサードパーティー製の解決策が提案されてきました](https://qiita.com/nekketsuuu/items/60634417e6279ccfd95b)。そして
Go 1.11 からは公式に「モジュール」が導入され、バージョン情報まで含めた依存関係管理のやり方が確立されました。これは Node.js や Python
/ pip の「パッケージ」に似た概念ですが、細かい所では依存関係解決のされ方が異なり、minimal version selection
が採用されています。詳しくはモジュールの解説をご覧ください：<https://github.com/golang/go/wiki/Modules>


CC BY-SA 4.0
2019-02-06T00:08:27.127
52576
2019-02-06T00:08:27.127
19110
52553
answer