0Pricing
Go Academy · レッスン

Protocol Buffersと.protoファイル

メッセージ型、サービス、protocによるコード生成

「Protocol Buffersと.protoファイル」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

Protocol Buffers とは

Protocol Buffers(protobuf)は、Google が開発した言語に依存しないバイナリシリアライズ形式です。JSON よりも小さく高速で、gRPC の標準的なワイヤーフォーマットです。

.proto ファイルの構文

.proto ファイルでメッセージとサービスを定義します:

syntax = "proto3";
package user;
option go_package = "github.com/example/user/pb";

message User {
    int64 id   = 1;
    string name = 2;
    string email = 3;
}

service UserService {
    rpc GetUser (GetUserRequest) returns (User);
}
message GetUserRequest { int64 id = 1; }

フィールド番号

各フィールドには、バイナリエンコーディングで使用される一意の番号(タグ)があります。スキーマの運用開始後は、既存のフィールド番号を絶対に変更しないでください。互換性が壊れます。

proto3 のデフォルト値

proto3 では、すべてのフィールドにデフォルト値があります(数値は 0、文字列は ""、bool は false)。required と optional の区別はなく、存在しないフィールドにはデフォルト値が設定されます。

protoc のインストール

protobuf コンパイラーと Go プラグインをインストールします:

brew install protobuf
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

Go コードの生成

protoc を実行して、Go の構造体と gRPC スタブを生成します:

protoc --go_out=. --go_opt=paths=source_relative \
       --go-grpc_out=. --go-grpc_opt=paths=source_relative \
       user/user.proto

生成される型

protoc は、メッセージごとの Go 構造体、getter メソッド、サービスインターフェース、未実装サーバー構造体、すべての RPC メソッドを備えたクライアント構造体を生成します。

Repeated フィールド

リストを表すには repeated を使用します(Go のスライスにマッピングされます):

message ListUsersResponse {
    repeated User users = 1;
}

列挙型

proto3 で列挙型を定義します。最初の値はデフォルト値となる 0 でなければなりません:

enum Role {
    ROLE_UNSPECIFIED = 0;
    ROLE_USER        = 1;
    ROLE_ADMIN       = 2;
}

既知の型

google/protobuf パッケージには、一般的な型である Timestamp、Duration、Struct(JSON に似た型)、Any が用意されています。.proto ファイルでインポートして使用します。

import "google/protobuf/timestamp.proto";
message Event { google.protobuf.Timestamp created_at = 1; }

後方互換性のルール

安全な変更: 新しいフィールドの追加、新しいメッセージ型の追加、新しい列挙値の追加。不安全な変更: フィールド番号の変更、フィールド型の変更、フィールドの削除(削除したフィールドは暗黙的にデフォルト値になります)。

クイックチェック

protobufメッセージのフィールド番号について、何が正しくなければなりませんか?

復習:Protocol Buffers

重要なポイント:

  • .protoではメッセージ(フィールドと型)とサービス(RPC)を定義します
  • フィールド番号は永続的なものです。再利用したり変更したりしてはいけません
  • protocとGoプラグインによって、Goの構造体とgRPCスタブが生成されます
  • repeatedフィールドはスライスになり、enumは0から始める必要があります

よくある質問

「Protocol Buffersと.protoファイル」レッスンは無料ですか?

はい。「Protocol Buffersと.protoファイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「Protocol Buffersと.protoファイル」で何を学びますか?

メッセージ型、サービス、protocによるコード生成 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Protocol Buffersと.protoファイル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Protocol Buffersと.protoファイル
  2. Unary gRPCサービスの実装
  3. サーバーストリーミングとクライアントストリーミング
  4. gRPCインターセプターとメタデータ
← Go Academyに戻る