😎

gotipでリリース前のGoを使って最先端Gopherになる

2021/12/14に公開

本記事はGo Advent Calendar 2021 15日目の記事になります
去年はこんな記事を書きました

https://zenn.dev/uji/articles/f6ab9a06320294146733

来年の2月頃、Goの新バージョン1.18がリリースされる予定です
今回のリリースはGenericsやFuzzing test, Workspace modeなど新機能が複数追加される大幅なアップデートになっています

これらの機能はまだリリースされておりませんが、リリース前の機能を簡単に試すことができる仕組みがGoにはあります

ローカルで動かす

以下の手順でgotipをインストールすることで簡単にローカルで新しいGoを試せます

go install golang.org/dl/gotip@latest
gotip download

gotipを既にインストールしている場合はgotip downloadを実行することで最新の状態に更新することができます

普段goコマンドを使うところをgotipに置き換えれば、最新の開発ブランチの環境でコマンドを実行することができます

gotip mod init example.com/m

などでgo.modファイルを作成すると1.18バージョンが指定されています(2021/12時点)

https://pkg.go.dev/golang.org/dl/gotip

余談ですが同じ要領で他バージョンのGoもインストールすることもできます
Go公式Twitterアカウントのリリース告知tweetにいつも載ってる画像のやつです

https://twitter.com/golang/status/1468963278416015375

goplsを最新にする

go1.18で追加された構文をエディタで書いてみると、静的解析で怒られました

これはエディタが利用しているgopls(Go公式のLanguage Server)がgo1.18に対応していないためです

goplsを使った補完や静的解析を有効にしたい場合は、goplsのmasterバージョンの用意が必要です

手順については公式のドキュメントに記述があります
https://github.com/golang/tools/blob/master/gopls/doc/advanced.md

ドキュメント通りにコマンドを実行することでmasterバージョンのgoplsが使えるようになります

# 必要なモジュールを記録するために空の go.mod ファイルを作成します
cd $(mktemp -d)
go mod init gopls-unstable

# 'go get' を使って必要なモジュールを追加し、それらが確実に連動するようにします
go get golang.org/x/tools/gopls@master golang.org/x/tools@master

# go1.17以前は前述の'go get'コマンドがgoplsのビルドに加えてインストールも実行されます
# go1.18以上またはtipを使っている場合は、次のコマンドを実行することでgo.modのバージョンでインストールします
go install golang.org/x/tools/gopls

コマンド実行後gopls versionコマンドでバージョンを確認してください
vx.x.xの後ろに最新のコミット日時・コミットハッシュの情報がついていればokです

gopls version
golang.org/x/tools/gopls master
    golang.org/x/tools/gopls@v0.0.0-20211209154716-27fc7644e1ac h1:UirinTEN/T9qsAKoE9oFyPi00b8QKSMKbfkUACNkSwE=

https://twitter.com/uji_rb/status/1470021548363100161

他のGo toolsも上記と同じ手順で、リポジトリのパスを変えてやればmasterバージョンを取得できるはずです
goimportsなどを利用している場合はそちらもmasterバージョンにする必要があります

Gotip Playground

ローカルの環境構築が面倒だという場合はgotipが動くGo Playground、Gotip Playgroundを使うのが良いです

Go Playgroundと同様にコードのシェアも簡単にできます

Go Playgroundにgotipで動かすモードが追加されました(tenntennさんに教えていただきました)
https://go.dev/play/

シンタックスハイライトやコード補完など高度な機能はないですが、気軽に構文を試したい場合はオススメです

年末はgotipでGenericsを先取りしちゃいましょう

Discussion