👻

go mod完全に理解した

2021/06/12に公開
1

はじめに

go mod周辺を理解してないとGo言語使った開発辛いと思うんですが、ネットの日本語情報少なくないすか?
最近はGOPATH使わないと思うんですが、古い情報が引っかかってきて、検索するのが辛いです。GOPATH使う時とgo mod使うときの比較情報も、あたらしくGo言語やる人的にはいらないと思うし。変更点は良いから、最新版の体系的な情報をくれよ、ってなってました。
新しく環境作るとき、自信ないままやってるんで、調べながらすこしまとめてみました。自信ないのはあんまり変わってませんが。。。

ちなみに、僕は、Go言語に入門して半年くらいで、なんとなく、3冊くらいGo言語の本読んだ状態です。goroutineとかわからん。

基本的には、ここらをなんとなく読んだ知識を整理してます。
Tutorial: Get started with Go - The Go Programming Language
Go Modules Reference - The Go Programming Language
Go1.16からの go get と go install について - Qiita

環境

Go 1.16

go modを使った開発の流れ

go mod init

開発の一番最初に、こんな感じのコマンドを打っておく。example.com/helloにgitのリポジトリを置く前提。

$ go mod init example.com/hello

go.modってファイルができる。リポジトリ名を間違えたらgo.mod消してもう一度やり直したら良さそう。
他のプログラムからmoduleとして呼ばないなら、go mod init helloとかでも良いんやと思う。
go.modは、go getとかしてたら勝手に中身を追加・修正してくれるので、基本触らない。触ったこと無い。ただ、go getせずにgo.modを手書きで変更するスタイルの人も、もしかしたらいるのかも。

module example.com/hello

go 1.16

コーディング

いい感じにコーディングする。
vscode使ってGo言語書くと、いつの間にかgo toolsのインストールをサジェストされて、何も考えずにクリックしてたら、いつの間にかいい感じの設定になってる。
なので、コード内のimport部分は勝手にいい感じに追加・修正してくれる。pkg.go.devにあるパッケージ使ったりしてる分には、何も考える必要なくて楽ちん。goplsあたりがやってくれてんのかな?よくわかってない。

go get

githubにある自分で作った別のリポジトリとか、野良リポジトリ使うときは、go get使って持ってきたら良さそう。バージョン指定するときは、@のあとにlatestとかタグとかコミットのハッシュ値をつける。
こんな感じ。

$ go get github.com/hoge/fuga@latest

Optionはアップデートする時に-uをつけるくらいで、他のは使ったことない。

コード内のimport部分にgithub.com/hoge/fugaとか書いて、go mod tidyしてもパッケージを入れてくれる。個人的には、go getで入れるほうが入れてる感があって良いと思ってる。

go mod tidy

これ打つと、go.sumってファイルができて、パッケージのインストールをいい感じにしてくれる。importしてるやつをとってきてくれてそう。
go.sumには依存関係が書かれてるっぽい。不要なやつも取り除いてくれる。

pkg.go.devにあるパッケージは勝手に持ってきてくれるはず。go getいらず。

環境設定的なところ

go install

go getで入れたパッケージはgo mod initしたリポジトリ単位で管理されるけど、go installで入れたパッケージはユーザーとかコンテナ単位で管理される。$GOPATHに入るっぽい。グローバルインストール的な感じ?意識して使うことはほとんどない。vscodeの設定でいつのまにかgo installしてるのはありそう。gomockとか、開発環境で固定したツールとかはこっちで入れといたら良さそう。
dockerとかの設定で入れとくのが良いんかなー。
流れ的には、最初に設定する場所な気もするけれど、開発で気にするのはgo modの方やろうから、最後に書いた。
golang/mock: GoMock is a mocking framework for the Go programming language.

GO111MODULE

デフォルトのままでok。気にしなくて良い。

おわりに

go modまわりの、ゆるふわ知識を整理してみた。
調べたらいろいろ情報出てくるけど、とりあえず、ここらへんを使えたらしばらくは自走できそうな気がしてる。できてないかもしれんけども。

ただ、あまり自信ないので、間違えてたら、指摘してほしいです。。。

GitHubで編集を提案

Discussion