golang 始めたばかりでよくわかっていないけれど、パッケージの構成についてまとめてみた。
CONTENTS
ENVIRONMENTS
- GO : 1.13.6
パッケージとディレクトリの構成
ここでは以下のパッケージを開発しているとする。
- main - awesome - feature - component
この時、ディレクトリ構成は以下の通り。
- main.go - awesome/awesome.go - feature/feature.go - feature/component/component.go
以下のルールでファイルを配置する。
- main.go はプロジェクト直下に配置
- パッケージと同名のディレクトリを作成
- パッケージと同名のファイルにコードを保存
- ネストしたパッケージについても同様
go では、同じパッケージなら、同じディレクトリに複数のファイルで定義できる。 なぜそうしたいのかよくわからない。 (機能ごとに分けるとかなら別パッケージにするべきじゃないかな)
まあコンパイルするし、IDE 使えばわかるし、カジュアルにファイルを分けようって方針な気もする。
初期設定の仕方
以下のコマンドでモジュールのパスを指定する。
go mod init $MODULE_PATH
ここでは MODULE_PATH=github.com/getto-systems/golang-example
として説明する。
これは GitHub で getto-systems
アカウントの golang-example
リポジトリでこのモジュールを公開する、という意味になる。
仕組みはよく調べていないが、ほかのモジュールから参照されたとき、アクセス可能なパスであれば依存関係を解決してくれるようだ。 (GitHub が止まったらコンパイルできなくなるのかな)
自分からしか参照しないなら、実際に GitHub で公開されていなくてもコンパイルは通る。
import の仕方
パッケージを import するときはモジュールのパスから指定する。
package main import ( github.com/getto-systems/golang-example/awesome github.com/getto-systems/golang-example/feature github.com/getto-systems/golang-example/feature/component )
自分のモジュールでも、フルパスで指定する必要がある。
まとめ
golang のパッケージの構成の仕方をまとめた。 まだ書き始めたばかりでほかのソースをよく見ていないので、これじゃうまくないところもあるだろうがとりあえずこれで始めてみる。
バージョンの管理についてもろいろやり方があるようだが、よく調べていない。 モジュールを公開することになったらまた調べてみる。