回答編集履歴

1

追記

2022/05/23 06:09

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -1,3 +1,44 @@
1
1
  GOPATHはGoのインストール先を指定するものではありません。
2
2
  外部ライブラリのキャッシュや外部実行ファイルのインストール先として利用する親フォルダを指定します。
3
3
  あらゆる環境変数設定はドキュメントを読まないのであれば何も設定しないほうが良いと思います。
4
+
5
+ ### 以下追記
6
+
7
+ Go向けの「ほげenv」の類の利用はお勧めしません。Go単体でGoのバージョン別ツールチェインのインストール機能があるのでそちらを使えば大丈夫。
8
+ また、「Goモジュールモード」という新しい仕組みを利用することで、Goのバージョン別にGOPATHを用意する必要はなくなりました。
9
+ (これがさらに「ほげenv」が不要な理由です)
10
+
11
+ 「Goモジュールモード」以前のモードは「GOPATHモード」と呼んで区別されていますが、
12
+ 「GOPATHモード」では複数パッケージを扱うプロジェクトはGOPATH配下に置く必要がありました。
13
+ (Go1.15ではGOPATH配下ならGOPATHモード、そうでないならGoモジュールモードとして動作しようとします)
14
+ 「Goモジュールモード」にてその制約は無くなりました。Go1.16からはデフォルトでGoモジュールモードとして動作します。
15
+ (なので、Go1.16以降を使うとエラーメッセージが変化すると思います)
16
+ 「Goモジュールモード」では任意のフォルダをGoモジュールとして初期化することでプロジェクトフォルダとして扱えるようになります。
17
+ 特別にGOPATHモードでなければビルドできないなどの理由がない限りGoモジュールモードを使うことを推奨します。
18
+
19
+ ### Goモジュールモードの基本
20
+
21
+ ```shell
22
+ mkdir zoo
23
+ cd zoo # ここをプロジェクトフォルダにしたいときに以下のコマンドを実行します
24
+ go mod init github.com/username/zoo
25
+ ```
26
+ go mod init に与える名前はユニークな名前を付与すればOKですが、以上のようにリポジトリURLになっていることが推奨です。(スラッシュ区切りがある場合最初の要素には必ず途中にドットが必要です。リポジトリに公開するつもりがないなら単発の名前例えば「zoo」だけでもいいです。)
27
+ 実際に存在するリポジトリがかどうかはこの時点では関係ありませんが、作ったモジュールをgo-get可能にするためには実在のリポジトリと名前を合致させる必要があります。
28
+
29
+ この際、go.modファイルが作られますが、
30
+ その中身は以下のようになります。
31
+
32
+ ```
33
+ module github.com/username/zoo
34
+
35
+ go 1.1?
36
+ ```
37
+
38
+ さらにサブフォルダ「animals」を作成し、その下にパッケージ実装を作成した場合、その「animals」のインポート方法は以下のように書きます。
39
+
40
+ ```go
41
+ import "github.com/username/zoo/animals"
42
+ ```
43
+
44
+ つまり、go.mod先頭行に書かれた「モジュール名」をプレフィックスにしてパスをフルパスに組み立ててインポートパスとします。