2023-12-02 に開催された「Go Conference mini 2023 Winter IN KYOTO」にオンライン参加しました。
今回は時間的に余裕があったので、ほとんど全てのセッションを聴くことができました。
本記事は、セッションの中でも特に興味深かったものについて簡単にまとめ記事となります。
Deep dive into log/slog package
Kanata Miyahana さん
Go1.21でリリースされた構造化ログのための標準ライブラリのlog/slogについてのセッションでした。
開発の背景として、ログを統一的に扱うことが目的というのがあるそうです。
メモリアロケーションを少なくするために、AttrのValueはanyではなくValue構造体型を定義している点、zapの使われ方を調査して初期化するキャパシティを決定した点などが非常に興味深かったです。
なぜそのような実装になっているのか?という点まで踏み込んでコードリーディングしていくことが重要ですね。
日時処理の新スタンダード: Synchro によるタイムゾーン安全、楽々開発
Kei Kamikawa さん
登壇者のKei Kamikawa さんの開発されているsynchroについてのセッションでした。
日付とテキストの変換が難しい、加算減算の使い方に気をつけないと危ない等の Go で日時周りの実装をする際の懸念点をカバーしてくれるライブラリのようです。
ISO8601完全サポートするためにかなりご苦労されたとのこと....!
実は Twitter で見かけてかなり気になっていたライブラリなので、作者の開発話を聞けたのはかなり良かったです。
Go1.22で導入予定だったzeroというbuilt-inについての紹介
Takuma Shibuya さん
Go1.22で導入予定だった識別子zero
についてのセッションでした。
一度AcceptedになってからDeclineに戻ったとのことですが、これは相当珍しいことみたいです。
個人的にはreturn time.Time{}
ではなく、return zero
のように書けるのは可読性の高い書き振りだと感じたので、今後導入されたら良いなと思っています。
CUE+Goで安全かつ簡単に設定ファイルを自動生成してみた
Naoki Kuroda さん
設定記述言語であるCUE(キュー)についてのセッションでした。
値と型を同等に使える点、バリデーションしてYAML/JSONに変換できる点などが気になりました。
Goと相性も良いとのこと。
Playgroundがあるのでちょっと試してみたのですが、バリデーションや型定義の書き振りがかなり好みです。
context.WithoutCancelについて語る
Momo Ito さん
Go1.21で追加されたcontext.WithoutCancelについてのセッションでした。
ロールバック中にキャンセルが起こると一貫性を失うので伝播させずにロールバックを続けたいなどのケースで、親がキャンセルされても子がキャンセルされないようにするのに使える機能のようです。
Webサービスではクライアント側から通信を切断されてしまったけど処理を中途半端に終了してしまうとまずいケースなどもあるかと思うので、覚えておきたい機能です。
The Future of encoding/json
Shunta Komatsu さん
encoding/jsonのV2パッケージについてのセッションでした。
encoding/jsonは5番目に多くimportされているらしくパッケージでファーストコミットは2008年という歴史のある人気パッケージですが、問題点がぼちぼちあるとのことです。
提案されているV2パッケージはRFCへの準拠、セキュリティ向上が主目標として進んでいるそうです。
構造体タグで様々な表現ができるようになるのが楽しみです。
まとめ
最近はあまりGoを書いていないのですが、かなり楽しめました。(またGoを書き続ける日々に戻りたい)
低レイヤー寄りの話や、機能の深堀りが多く非常にタメになるセッションが多かったです。
また、今回はオンライン参加でしたがオフラインで会場の雰囲気を味わってみたいなーと思いました。(次回の東京でのカンファレンスは出張しようかな...。)