概要
引き続き、Go勉強中。
Goは、プロジェクトのレイアウトの考え方が他の言語とちょっと違うので
最初ちょっと戸惑いました。以下メモです。
まずは、以下を読むみたいです。
GOPATH
Goでは、GOPATH
という環境変数がとても大事です。
この GOPATH
配下の場所を ワークスペース
として捉えて作業場所とするのが Go流 とのこと。
$GOPATH/src
の下にソースを置いて、$GOPATH/bin
の下にバイナリが出力されるという感じ。
ディレクトリレイアウトについては、上記の How to Write Go Code
を参照ください。
でも最近のバージョンではGOPATH気にしなくていい
上で、GOPATH超大事って書いたのですが、最近のバージョンでは、正直あまり気にしなくていいです。
前は、自分でGOPATH指定する必要があったみたいですが、最近のバージョン (1.13) では、設定してなかったら
$HOME/go
がデフォルトの場所になるようになっています。
go env GOPATH
で調べられます。
また、1.11 以降では モジュール という概念が登場したので、開発時もソースを $GOPATH/src
の下に
置く必要もなくなっています。
なので、普通にどこかにディレクトリ作って、その中でソース書いてビルドしたりしてもオッケイです。
少なくとも、Goでモジュール機能を有効化して開発する場合は、どこにソースを置いていても大丈夫。
んじゃ、GOPATH何に使われるの?
go help gopath
とすると、ヘルプテキストが表示されますが、以下のように書かれています。
When using modules, GOPATH is no longer used for resolving imports. However, it is still used to store downloaded source code (in GOPATH/pkg/mod) and compiled commands (in GOPATH/bin).
モジュール機能を有効したら、GOPATHはもはやimportの解決には利用されませんが、ソースコードのダウンロードとコマンドのコンパイルにはまだ利用されますって感じですね。
私の手順
私の場合は、なんかちょっとしたツール作るときとかに、大抵以下のようにしてます。
- ディレクトリ作る
- ディレクトリの中に入って go module を有効にする
- ソース書く
$ cd dokoka $ mkdir helloworld $ go mod init my/package/root/name # e.g.: go mod init github.com/devlights/helloworld $ code main.go
依存ライブラリなどの解決は、go module がやってくれるので楽ですね。
モジュールについては、以下が詳しいです。
Goのプロジェクトレイアウト
どの言語でも、暗黙のプロジェクトレイアウト標準ってのがあったりします。
Goの場合は、以下が有名みたい。
なかなか細かく記載されているのですが、チームで開発したりする場合には則っていたほうがいい規約ですね。
個人でちょこちょこ何か作っている程度なら、そんなに気にしなくていいんじゃないでしょうか。
私自身、取り入れているのは
- 実行ファイルを用意するプロジェクトの場合は
cmd
ディレクトリつくってその下に main.go 置く
ぐらいです。
参考記事
以下もわかりやすかったです。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場