Go Conference 2023 聴いてきました!(感想とメモ)

GoConf 楽しかった

GoConference に初参加して、セッションを拝聴しました!

有休を取って、個人として参加です。休みをとったのは、

  • 単純に申し込みタイミングで現職に入社してなかった
  • 業務と並行すると集中して聞けない
  • 業務枠だと、会社に還元しなきゃ、ちゃんとした記事書かなきゃ、といういらないプレッシャーを(勝手に)感じてしまう

のが理由です!

有休を取っても、ずっとsessionを聞き続けるのは大変なので、結局休み休み聴くことになりました。

どのセッションも濃くて面白く、こんなにいい話が無料で聞けるのは運営・スポンサーのお力あってこそだと思います、本当にありがとうございます!

拝聴したセッションpickup

聴いたセッション全てではないですが、いくつかのsessionについて感想(自分にとってのメモ)を残します!間違ってたら教えて下さい!

タクシーアプリ『GO』高速マッチングシステムで実践したGoチューニングテクニック

speaker: https://twitter.com/74th

配車の高速マッチングシステムをパフォーマンスを維持しながらマイクロサービスに切り出した話でした。

タクシーを呼ぶ人も複数、車(タクシー)も複数いる中で、全体最適なマッチングを計算する必要があります。 誰かが長い時間待たされることもないようにする、という制約条件もありますし、簡単な計算ではないと思います。 今回のセッションはアルゴリズムはスコープ外だったのですが、個人的にはそこも面白そうだなと感じました。

パフォーマンスを維持していることの確認のためのツール(E2Eやガントチャート)を整備したり、バッチ処理を導入した上で最適化したり、既存システムの価値を損なわないために丁寧に進めててすごいなと思いました。 マイクロサービスへの切り出しをする人にとっても参考になる事例だと思いました。

無理なく始めるGoでのユニットテストの並行化戦略

speaker: https://twitter.com/sho_hata_

slide: https://speakerdeck.com/shohata/go-conference-2023

テストの平行化をするためにあれやこれやをした話でした。

-p オプションと -parallel オプションが別物なのをしらなかったです、勉強になりましたmm

サブテストの平行化をするためには t.Parallel() をそこかしこに書く必要がありますが、面倒なのでツール作っちゃっててhack精神がいいなと思いました。 その他、平行化でに当たって気をつけること、課題解決ツールについて端的にまとまっていて、勉強になりました。

よくわかるThe Go Memory Model - 行間を図解で埋め尽くす

speaker: https://twitter.com/shino_nobishii

material: https://github.com/nobishino/goconference2023/blob/main/glossary.md

goを深く理解したい人がぶつかりがち(らしい)なMemory Model についての解説でした。

講義が設計されていて、教えるのがうまい教授、って感じでした。 Memory Model については全くしらなかったのですが、すごいわかりやすくて、理解した気になりました。 とりあえず datarace オプション (-race) 付けなきゃ、ですね。

話がわかりやすくて面白いのもそうですが、概念自体も面白かったですし、go のメモリ管理を深く理解したいなと思いました。 「逐次一貫モデルはほとんどの良いGoプログラムについて成り立つが、全てのGoプログラムについて成り立つわけではない」とか、言い回しが素敵でした。

多様なプロトコルと駆動モデルをサポートするIoTゲートウェイの開発と運用の知見

speaker: twitter.com

slide: https://speakerdeck.com/takesinoda/duo-yang-napurotokoruto-qu-dong-moderuwosapotosuruiotgetoueinokai-fa-toyun-yong-nozhi-jian

いろんな現場で動いているIoT機器と自社クラウドをつなぐ間にいるゲートウェイについての話でした。

個人的に、ハードウェアとソフトウェアの両輪で課題解決するプロダクトが面白いなと思っていて、全く専門外でしたが楽しく聴かせていただきました。

工場や重機の中など、ハードウェアが置かれる環境は様々で、また、何か問題が起こった時にSSHしたり実際のハードウェアを触りにいけるわけではない、とかなり厳しい条件だなと思いました。 ハードウェアの通信規格は本当に様々で、それをゲートウェイを噛ませて一定の標準化をするわけですが、それぞれにドメインが深かったりするので開発も運用もかなり大変だよな〜と思ってました。

GoCon でもありますし、セッションの内容はシステムのリアーキテクチャとそれをgoでどうやって実現したかの話がメインで、これも面白かったです。

Dive into testing package ~ Part of Fuzzing Test ~

speaker: https://twitter.com/sivchari

slide: https://speakerdeck.com/sivchari/dive-into-testing-package-part-of-fuzzing-test

testing package の実装まで潜って理解していく話でした。昨年に基本編を話していたらしく、その発展編でした。

基本編をしらなくてもわかるように構成してくださってたのですが、途中でボーッとしてしまって、途中から追えなくなりました。 基本編も含めて読み直させていただきますmm

Escape Analysis in Go: Understanding and Optimizing Memory Allocation

speaker: Harsh Gupta (@dhrsh24) / Twitter

(最後のスライドにリンクが資料へのリンクがはられてたのですが、メモれなかったです...)

英語のセッションでしたが、スライドに日本語も書いてくださってました。

escape analysis の説明と、メモリ最適化のためにどのように書くと良いか、の話でした。

関数内で宣言した変数は関数のスタック領域にメモリが確保されますが、宣言した変数が関数の寿命よりも長生きする場合、その変数はヒープ領域にメモリ確保されます。 スタック領域は自動で解放されますが、ヒープ領域の解放はGCをまたなくてはならず、結果メモリ効率が悪化します。 どちらの領域でメモリ確保するかはコンパイル時に決定され、その様子は -m -l オプションを付けてbuild すれば見ることができます。

...と、理解しました

関数内で宣言した変数をポインタを返して外から使う、みたいなお行儀の悪いことはしていないと思いたいですが、改めて意識しながらコーディングしようと思いました。

Go1.20からサポートされるtree構造のerrの紹介と、treeを考慮した複数マッチができるライブラリを作った話

speaker: https://twitter.com/convto

slide: https://speakerdeck.com/convto/introduction-of-tree-structure-err-added-since-go-1-20

タイトル通りの話でした。

proposal の議論を紹介しつつ、仕様の意思決定がどう行われたかまで紹介してくださって、わかりやすかったです。 仕様の問題点について可能性を考えた上で、実際に議論に上がっていた別仕様について実装してみて、今の仕様がバランスのとれた落とし所だという結論にたどり着いていました。 批評で終わらず、手を動かした上で自分の意見を持つ、というのがすごいなと思いました。批評家で終わらないようにと改めて自戒しました(この記事はメモだから許して)。

Goのデバッグ用ロガーの開発を通して得た, デバッグとgoパッケージに関する知見

speaker: https://twitter.com/task4233

slide: Goデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見 - Google スライド

デバッグする際の選択肢について整理した後、消し忘れがちなデバッグロガーをコミット前にgit hooksで削除する仕組みの話でした。

たしかにデバッグロガーを消し忘れることはあるので、素晴らしい仕組み解決だなと思いました。 あと print がbuiltin にあるの知らなかったです。

AST関連をgoで扱う基本的な方法も紹介されていて、linter 自作してみたい機運が高まりました。

sync.Mutexの仕組みを理解する

speaker: twitter.com

slide: https://speakerdeck.com/ffjlabo/sync-dot-mutexnoshi-zu-miwoli-jie-suru

sync.Mutexの内部実装まで見ていって、完全理解するまでの流れを一緒に進めてくれる話でした。

排他制御はOSの仕組みを勉強するときに触れたことがありますが、自分で実装しようとしたら失敗する気しかしないな、と改めて思いました。

Deep Dive の話でもそうですが、内部実装もgoで書かれているから読みに行けるのはgoの良いところであり、好きなところです。

おわりに

ちゃんと聞けなかったセッションもキャッチアップしていきたいです。(それが難しいからリアルタイムに参加している節もあるんですが、気持ちは気持ち)

あらためてスポンサーの会社様、運営の皆様、登壇者の皆様、盛り上げてくださった参加者の皆様、ありがとうございました!

自分も登壇できるようになりたい..!