Wire type は実際の型を示しているわけではないことに注意してください。Wire type はあくまでも値を読み取るための手がかりにすぎないため、読み取った値をどの型にするべきか知るためには descriptor を参照しなければいけません。 タグは次のようなロジックでエンコードされます。 fieldNumber << 3 | wireType たとえばフィールド foo の場合、フィールド番号は 1、Wire type は 0 なので 08 となります。これはエンコードされたバイト列の先頭バイトと一致しています。 fieldNumber := 1 wireType := 0 tag := fieldNumber<<3 | wireType fmt.Printf("%x", tag) // 08 タグの直後にはそのフィールドに対応する実際の値が続きます。 Wire type に基づい
![つくって学ぶ Protocol Buffers エンコーディング | メルカリエンジニアリング](https://cdn-ak-scissors.b.st-hatena.com/image/square/b39056dc78c1590704328bf8ffd40ef64fe5b697/height=288;version=1;width=512/https%3A%2F%2Fengineering.mercari.com%2F%2Fimg%2Fogp%2Fogp_a.jpg)