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@latestGo コードの生成
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Protocol Buffersと.protoファイル
- Unary gRPCサービスの実装
- サーバーストリーミングとクライアントストリーミング
- gRPCインターセプターとメタデータ