zenn.dev 昨日 17:37

Go言語による分散サービス_第2章_ProtocolBuffers

書籍『Go言語による分散サービス』の学習記録第2章。ログレコードのスキーマをProtocol Buffersで定義し、protocとGo向けプラグインでコードを生成する手順を解説。.protoファイルの構文(syntax、package、go_package、フィールド番号)、Makefileによるコード生成コマンド、生成されたGoコードの構造、proto.Marshal/Unmarshalによるバイト列とのシリアライズ変換を実例付きで示す。

書籍『Go言語による分散サービス』の学習記録第2章。ログレコードのスキーマをProtocol Buffersで定義し、protocとGo向けプラグインでコードを生成する手順を解説。.protoファイルの構文(syntax、package、go_package、フィールド番号)、Makefileによるコード生成コマンド、生成されたGoコードの構造、proto.Marshal/Unmarshalによるバイト列とのシリアライズ変換を実例付きで示す。
↗ 元記事を開く
developers.cyberagent.co.jp 2026/08/20

Go 1.27のリリースによる既存実装への影響事例

ABEMAの広告配信システムでGo 1.27へのCIアップデートを検証した事例。ほとんどのCIは互換性を保って通過したが、protobufの自動生成コード差分チェックのみ失敗した。原因はcompress/flateの圧縮アルゴリズム変更によりgzip圧縮結果のバイト列が変わったこと。旧世代のprotobuf generatorはgzip済みdescriptorを生成コードに埋め込むため影響を受けるが、現行世代はruntime側でgzipするため影響を受けない。go.modのgo directiveとtoolchainのバージョンは独立しており、toolchainが新しければgo.mod側が古くても生成物が変わりうる点も指摘している。

ABEMAの広告配信システムでGo 1.27へのCIアップデートを検証した事例。ほとんどのCIは互換性を保って通過したが、protobufの自動生成コード差分チェックのみ失敗した。原因はcompress/flateの圧縮アルゴリズム変更によりgzip圧縮結果のバイト列が変わったこと。旧世代のprotobuf generatorはgzip済みdescriptorを生成コードに埋め込むため影響を受けるが、現行世代はruntime側でgzipするため影響を受けない。go.modのgo directiveとtoolchainのバージョンは独立しており、toolchainが新しければgo.mod側が古くても生成物が変わりうる点も指摘している。
↗ 元記事を開く