なにが発生した?
Go言語のWebフレームワーク Gin が気になったので、Hello,World!的なものを作ろうとした。
その際に、
> go install github.com/gin-gonic/gin@latest
を実行したが、go build
でパッケージが見つからないエラーが発生した。
この時の環境
Microsoft Windows [Version 10.0.19044.1766]
(c) Microsoft Corporation. All rights reserved.
C:\Users\7280ayubihs>go version
go version go1.18.3 windows/amd64
解決の備忘録
go install
の実行後に調べてみると、$GOPATH/pkg/mod
にGinが配置されており、go build
実行時に$GOPATH/pkg/mod
にパスが通っていないので、エラーになったようです。
で、この$GOPATH/pkg/mod
は Go modules が有効になっている場合に、ダウンロードされたパッケージが配置される場所らしい。Go modulesは、Go1.11バージョン以降追加されたモジュール管理機能で、GO111MODULE
環境変数をonにすることで利用できるようになるとのこと。
なお、GO111MODULE
環境変数の設定値は、次の値があるようです。
値 | 内容 |
---|---|
on | モジュール対応モードで動作 |
off | GOPATHモードで動作 |
auto | $GOPATH/src 以下のディレクトリに配置され go.mod ファイルを含まないパッケージは GOPATH モードで,それ以外はモジュール対応モードで動作する |
GO111MODULE
環境変数を確認すると、未指定だったので、次のコマンドでOnにしました。
> go env -w GO111MODULE=on
Go modulesは、go mod
コマンドで初期化して、go.mod と go.sum を生成する必要があるので、
プロジェクトのカレントディレクトリに移動して、次のコマンドを実行した。
> go mod init <project-name>
実行すると、無事、go.mod と go.sum が生成されていました。この2つのファイルはそれぞれ、次のような役割があるようです。
go.sum は .gitignoreで除外の指定をした方がよさそうですね。
ファイル | 役割 |
---|---|
go.mod | モジュールの依存関係が記述されているファイル |
go.sum | 依存モジュールのチェックサムを管理しているファイル |
初期化が完了したので、改めて、github.com/gin-gonic/ginをインストールします。
go installではなく、go getコマンドでインストールです。
> go get -u github.com/gin-gonic/gin
この後、go buildが無事完了し、Hello,World!的なものも動きました。
最後に
まずは、Hello,World!的なものが動いたので、良し!
ただ、go install
とgo get
の違いとか、知るべきことは、まだまだ多いなと痛感した。
謝辞
以下の記事で勉強させていただきました。ありがとうございます。
https://qiita.com/Syoitu/items/f221b52231703cebe8ff
https://zenn.dev/spiegel/articles/20210223-go-module-aware-mode
https://zenn.dev/tennashi/articles/3b87a8d924bc9c43573e