メインコンテンツまでスキップ

Goについての周辺知識

前回 go.mod ファイルを作ってもらいましたが、そういった周辺知識の説明ができていなかったので今回は周辺知識について学びます
こういった言語にまつわる周辺知識やツールのことを、エコシステムと呼んだりすることもあります

Package

Each package within a module is a collection of source files in the same directory that are compiled together.
(Go Module Referenceより引用)

モジュール内の各パッケージは、同じディレクトリにあるソースファイルの集まりで、一緒にコンパイルされます

つまり、パッケージはソースファイルの集まりなので図にするとこんな感じです

packages

よく使用されるnet/httpfmtなどは標準のパッケージになります
標準パッケージの他に、ユーザーが作成したパッケージを外部に公開することもでき、https://pkg.go.dev/ などを用いて検索することができます

公開されているパッケージはgo getコマンドやgo installコマンドなどを用いてインストールすることができます が、人が見てもわかる構造になっています

go get github.com/mattn/go-sqlite3
go getコマンドとgo installコマンドの使い分け

The go get command updates module dependencies in the go.mod file for the main module, then builds and installs packages listed on the command line.
(https://go.dev/ref/mod#go-getより引用)

go get コマンドは、メインモジュールの go.mod ファイルにあるモジュールの依存関係を更新し、コマンドラインにリストされたパッケージをビルドしてインストールする

つまり、go getコマンドは go.mod に記述されている依存関係を更新するときに使います
公開されているパッケージをimport "fmt"みたいな感じで自分のソースコード内でインポートしたいときなんかに使うと良いです

The go install command builds and installs the packages named by the paths on the command line.
(https://go.dev/ref/mod#go-installより引用)

go installコマンドは、コマンドライン上のパスで指定されたパッケージをビルドしてインストールする

go installコマンドは環境自体にパッケージをインストールします
CLIとして公開されているもの(例. 静的解析ツールなど)をインストールしたいときなんかに使うとよいです

Module

A module is a collection of packages that are released, versioned, and distributed together.
(Go Module Referenceより引用)

モジュールとは、一緒にリリースされ、バージョン管理され、配布されるパッケージの集まりである

つまり、モジュールはパッケージの集まりなので図にするとこんな感じです

modules

モジュールの依存関係などを go.mod ファイルなどによって管理します
npmとかでいうところのpakcage.jsonに近いです

また、go.modファイルがあるディレクトリがそのモジュールのルートディレクトリになります

go mod init ここにモジュールパス名 とすることで go.mod ファイルが作成され、go getコマンドなどでパッケージをインストールする際にgo.modは自動更新されます