フューチャー技術ブログ

Go 1.18 Release Notes みんなで読む会を開催しました

TIGの伊藤真彦です。

2022.1.14(金)に Go 1.18 Release Notes みんなで読む会 というイベントを開催しました。

Go 1.18 Release Notes みんなで読む会

フューチャーでは定期的に勉強会などのイベントを開催しています。詳細はconnpassで確認できます、今後もイベントを開催予定ですので、ぜひご確認ください。

Go 1.18 Release Notes みんなで読む会はタイトルの通りGo 1.18のリリースノートを読み、適宜解説を行うイベントです。

がっつりと資料を作りこむスタイルではなく、社内勉強会くらいの軽めのノリでオープンなイベントを開催するという試みでもありました。詳しくは、がんばらない手ぶらオンライン勉強会の記事で説明しています。

視聴枠40人が埋まり、楽しくイベントを開催できました、今後はこういったスタイルのイベントを高頻度に開催できると良いかもしれませんね。

リリースノートの内容を紹介

イベントで取り上げたリリースノートの注目ポイントを軽く紹介します。内容はYouTube動画で公開予定です。

Generics

Go1.18の目玉機能と言えばGenericsの導入です。

Genericsは既にチュートリアルも公開されていますが、Type ParametersProposalで提案された内容に従った新機能が提供されます。

リリースノートの内容だけでもある程度紹介にはなりますが、非常に大きく複雑な新機能であるため、詳しくは様々な資料を見たり実際に触れながら勉強していくと良いでしょう。

またリリースノートにはメソッド内の型宣言など、Go 1.18では提供しないが、Go 1.19で追加を検討している機能もあるなど注意事項も書かれています。

Bug fixes

勿論バグの修正もリリースノートには記載されています。

今回は使用されていない変数をコンパイラが検知できないエッジケースの修正などが含まれています。普通に使っていて同じ現象に遭遇する事はほぼ無いであろうケースが紹介されており、これはこれで勉強になります。

Port

Portとはビルド対象のアーキテクチャにまつわる話です。AMD64、RISC-Vなど各アーキテクチャ向けにビルドした際の挙動の変更などが記載されています。CPU命令セットの話など詳しい人と一緒に読んでいくと大きな学びになります。

GoはPlan 9対応が強いよね。理由は開発チームにメンバーがいて..といった小話をしました。

Fuzzing

Genericsの導入が大きいため他の変更は少ないと思いきや、その他様々な新機能も提供されています。

Go1.18からテストでFuzzingを行う事が可能になります。詳しくはfuzzing landing pageをご覧ください。

イベント当日で私が喋った部分です。

Go command

go getgo instal等の各種コマンドの細かな変更から、前述のFuzzing機能の追加によるコマンド追加などが説明されています。

Runtime

ガベージコレクタの改善などが説明されています。

Compiler

コンパイル結果の改善やジェネリクスの追加によるコンパイル速度への影響などのトピックがあります。
-asanオプションについてはリリースノートを読むまで知らなかった、という方も多いのではないでしょうか。

Linker

リンカについては-asanオプションについて記述があります。

asanとはつまりAddress Sanitizerの事ですね。cgoを利用する際に起こり得るメモリエラーを検知できるようになります。

Core library

Genericsの登場に伴いconstraintsパッケージが登場する事が大きなニュースではありますが、net/netipパッケージの登場などGenerics以外でも様々なニュースがありました。

Go 1.18はジェネリクスなど大きな目玉機能が多いので、コアライブラリなどの機能追加は減らそうという

まとめ

  • リリースノートを読む会を開催しました
  • Genericsの導入が目玉ですがその他にも様々な変更があります
  • connpassに今後のイベント予定を掲載しています

次回は2022/1/28(金)にAWSを中心とした勉強会を開催します。
ぜひご参加ください。