Goパッケージの配置ルールとディレクトリ構成
|
これまで適当な場所にコードを置いて開発していたのですが、なにやら流儀があるようだったので、見直すことにしました。
パッケージの作成場所
新たに独自のパッケージを作成する場合は $GOPATH/src/github.com/username
配下におくのが良いようです。
usernameはgithubのユーザ名です。
ディレクトリ構成
みんなのGo言語
という本では下記のような構成をサンプルとして提唱していました。
$GOPATH/src/github.com/username/mygoapp/
├── Makefile
├── README.md
├── _tools/
├── cmd/
│ └── mygoapp/
│ └── main.go
├── go.mod
├── internal/
├── logger/
│ └── logger.go
├── mygoapp.go
├── mygoapp_test.go
├── testdata/
├── type.go
├── type_test.go
└── version.go
$GOPATH/src/github.com
配下に mygoapp
というパッケージ名でディレクトリを作成しています。
ディレクトリ名と、パッケージのファイル名は別々でも良いようですが、ファイルの冒頭に記載する package hogehoge
は、ディレクトリと名と一致させた方が良い。
Makefile
はビルド、タスクランナーとして使います。このファイルに、ビルドやテスト時に実行するコマンドを記載しておけば、 make
コマンドを叩くだけで記述内容にしたがってコンパイルされます。Dockerで構築されたミニマムな環境の場合は、Dockerfileを利用する方が良いかもしれません。
testdata
や _
で始まるディレクトリはGoのパッケージとはみなされないので、ここにGo以外のコードやファイルを置くことが出来ます。
go.mod
は依存関係のモジュールが管理されているファイル。RubyのGemfileのようなもの。
上記の構成以外だと、 https://github.com/golang-standards/project-layout などが有名みたいです。
まとめ
「動きゃいいんだよ〜」と雰囲気でディレクトリを切ってましたが、これを機に、デファクトに近づけていこうと思います。