Golangパッケージの配置ルールとディレクトリ構成

これまで適当な場所にコードを置いて開発していたのですが、なにやら流儀があるようだったので、見直すことにしました。

パッケージの作成場所

新たに独自のパッケージを作成する場合は$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などが有名みたいです。

まとめ

「動きゃいいんだよ〜」と雰囲気でディレクトリを切ってましたが、これを機に、デファクトに近づけていこうと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください