いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-03 (GOPATH, ワークスペース, プロジェクトレイアウト)

概要

引き続き、Go勉強中。

Goは、プロジェクトのレイアウトの考え方が他の言語とちょっと違うので

最初ちょっと戸惑いました。以下メモです。

まずは、以下を読むみたいです。

golang.org

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の解決には利用されませんが、ソースコードのダウンロードとコマンドのコンパイルにはまだ利用されますって感じですね。

私の手順

私の場合は、なんかちょっとしたツール作るときとかに、大抵以下のようにしてます。

  1. ディレクトリ作る
  2. ディレクトリの中に入って go module を有効にする
  3. ソース書く
$ 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 がやってくれるので楽ですね。

モジュールについては、以下が詳しいです。

blog.golang.org

blog.golang.org

blog.golang.org

Goのプロジェクトレイアウト

どの言語でも、暗黙のプロジェクトレイアウト標準ってのがあったりします。

Goの場合は、以下が有名みたい。

github.com

なかなか細かく記載されているのですが、チームで開発したりする場合には則っていたほうがいい規約ですね。

個人でちょこちょこ何か作っている程度なら、そんなに気にしなくていいんじゃないでしょうか。

私自身、取り入れているのは

  • 実行ファイルを用意するプロジェクトの場合は cmd ディレクトリつくってその下に main.go 置く

ぐらいです。

参考記事

以下もわかりやすかったです。

postd.cc

techdo.mediado.jp

qiita.com

hackernoon.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com