Go v1.16に追加されたgo installの機能を試してみる

2 min読了の目安(約1800字TECH技術記事

Go v1.16がリリースされましたね!

https://golang.org/doc/go1.16

追加された機能がいろいろありますが、今回はembedを試してみます!

https://future-architect.github.io/articles/20210207/

新しいgo installの機能

  • go installコマンドはもともと存在します
  • Go v1.16から新しくバージョン指定ができるようになった
  • むしろ、バージョン指定をしないといけなくなった
  • go.modの書き換えが起きなくなった

要約すると

  • Go Module追加編集のためのには go get を使う
  • ツールなどのバイナリインストールのためには go install を使う

リリースノートはこちらです

https://tip.golang.org/doc/go1.16#tools

従来の仕組みでツールをインストール場合は

  • go get golang.org/x/tools/cmd/stringerでインストールすると、go.modにパッケージが追加される
  • コード内でstringerを参照してる部分がなければ、go mod tidyをするとgo.modから消える

新しい仕組みでツールをインストールする場合は

  • go install golang.org/x/tools/cmd/stringer@latest だけでOK
  • go.modの書き換えは起きない

試してみた

従来のやり方でやってみる

$ go get github.com/99designs/gqlgen
  • 最新バージョンv0.13.0 が追加された
  • インストールされた場所は、$GOPATH/pkg/mod/github.com/99designs/gqlgen@v0.13.0
  • gqlgen コマンドが使えるようなります
  • go.modに追記された
  • go mod tidyすると、go.modから消える

新しいやり方をバージョンなしでやってみる

$ go install github.com/99designs/gqlgen
  • バージョン指定をしていないのでエラーになります

新しいやり方を@latest指定でやってみる

$ go install github.com/99designs/gqlgen@latest
  • 最新バージョンv0.13.0 が追加された
  • インストールされた場所は、$GOPATH/pkg/mod/github.com/99designs/gqlgen@v0.13.0
  • gqlgen コマンドが使えるようなります
  • go.modに追記されない
  • gqlgen コマンドが使えるようなります

古いバージョンをインストールするのどうなるの?

まずは最新バージョンをインストールしておく

$ go install github.com/99designs/gqlgen@latest
$ gqlgen version
v0.13.0

次の古いバージョンをインストールしてみる

$ go install github.com/99designs/gqlgen@v0.12.2
$ gqlgen version
v0.12.2

どこのディレクトリでgqlgenを実行してもv0.12.2が使われるようになった

また新しいバージョンをインストールしてみる

$ go install github.com/99designs/gqlgen@latest
$ gqlgen version
v0.13.0

どこのディレクトリでgqlgenを実行してもv0.13.0が使われるようになった

最後にインストールしたのバージョンが使われるようになりました

まとめ

  • Go Module追加編集のためのには go get を使う
  • ツールなどのバイナリインストールのためには go install を使う

参考

https://tip.golang.org/doc/go1.16#tools
https://future-architect.github.io/articles/20210209/