本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
それでは「フライングして学ぶGo 1.19」というタイトルで発表を行いたいと思います。
本日の資料はこちらのURLからアクセスできます。
merpay ExpertsTeamの上田と申します。よろしくお願いします。
Goのリリースサイクル
今回は、Go 1.19の新機能について説明します。
まずはGoの開発サイクルについて説明したいと思います。Goは毎年8月と12月にリリースされます。今のところ、1.X系でずっとリリースされていますので、つまりマイナーバージョンがアップデートされることになります。
リリースの3カ月前からDevelopmentFreezeという形で、バグ修正とドキュメント修正以外は基本、行われないことになっています。
リリース2カ月前からベータ版がリリースされ、リリース1カ月前からRC版が基本的にはリリースされます。
詳しいことはGoのWikiにあるGoReleaseCycleというページか、山口さんが書いているGoのリリースプロセスとブランチ戦略というブログを参照ください。
Go 1の後方互換
Goは、1.X系の間は後方互換が保たれるという約束がされています。つまり、言語仕様や標準ライブラリには、Go 1.xの間は破壊的変更は加わらないという形になっています。一部セキュリティや仕様バグなどの例外はありますが、今のところはずっと後方互換が保たれている形になっています。
これはつまり、Go 1.0で書いたコードは、Go 1.08のコンパイラでもビルドできるという形になっています。そのため、Go 1を対象にして執筆された書籍やブログは言語仕様や標準ライブラリに関しては、後方互換が保たれるため、現在のところ有効です。ただし、ランタイムやgo toolに関しては変更される可能性があります。
Goの開発プロセス
Goの開発プロセスは、実際にGoを使った中で問題を見つけ、解決策をコミュニティに提案し、議論します。そして実装して評価し、問題がなければリリースされるという手順で開発が行われています。
Webを検索すると、Go 2という言葉が出てくるかもしれません。しかし、現在のところ明確なターゲットがあるわけではなく、Go 1.X系として開発されているうちに、後方互換が保てなくなるような変更が加わる場合に、Go 2としてリリースされます。
新機能のキャッチアップ
それでは、Goの新しい機能をどうやってキャッチアップするかという話をしていきます。
Goは先ほど言った通り、提案がされて、それを評価して実装に進むという形を取っているので、新しい機能が入る場合はプロポーザルやドラフトデザインなどが提出されます。そのため、これらをIssueなどから探して見つけます。
また、最近では、GoチームがYoutubeでドラフトデザインやプロポーザルの解説をしている場合がありますので、そちらを見ると良いでしょう。またソースコードを読んでみるのも、ひとつの手ではあると思います。
Go 1.18のアップデート
3月にリリースされた、Go 1.18の主なアップデートについて説明します。
Go 1.18は、通常より1カ月遅れのリリースとなっています。理由は、3つの大きな機能をリリースしたためです。Fuzzing、Workspace mode、ジェネリクスになります。これらの機能について興味のある方は、下の資料をご参照ください。
Go 1.19以降で予定されている機能
それでは、Go 1.19以降で入る予定の機能について説明していきたいと思います。ここに挙げている機能は、マイルストーンがGo 1.19に設定されているものであり、すべてがGo 1.19で入るとは限りません。詳しくは最新のIssueのコメントなどを参照してください。
大きく分けて、ここでは3つに絞っています。型パラメータ、脆弱性DB関連、その他です。
型パラメータに関しては、expパッケージ下にあったジェネリクス関連の3つのパッケージが標準パッケージになる可能性があります。また、Go 1.18で見送られた型エイリアスで型パラメータを使用する機能が追加される予定です。型制約の型推論の改善だったり、型セットの要素が同じフィールドを持つ時の挙動の改善だったりが行われる予定です。また静的解析ツールのgo vetへの型パラメータ関連の機能追加が行われる予定です。
次に、脆弱性DB関連です。脆弱性DBを管理しているx/vulndbと、そのクライアントを管理するx/vulnパッケージの開発が進んでいます。govulncheckというコマンドが作られており、これによりソースコードを静的解析したり、バイナリのシンボルテーブルを解析することによって、脆弱性のあるライブラリを使用している場合に警告してくれます。また、pkg.go.devというパッケージドキュメントを見るサイトに、脆弱性の情報が掲載される予定です。
ほかにも上記スライドに記載の機能が入る予定です。
開発版を試す方法
次に、開発版を試す方法について説明します。
1つ目は、gotipコマンドを用います。Goでは、特定のバージョンをインストールする機能があります。それを使って、開発版であるgotipをgo installでインストールして使います。gotipコマンドは、通常のGoコマンドと同じように使うことができます。
また、The Go PlaygroundというWeb上でGoのコードを実行できるサイト上でも、現在のバージョン、1つ前のバージョン、開発版の3つのバージョンで動作を確認することができます。
まとめ
まとめです。
Goは後方互換を保ちながら、年に2回アップデートしています。Go 1.18でも大きな機能がリリースされ、Go 1.19以降も続々と機能が追加される予定です。
ご清聴ありがとうございました。