0Pricing
Go Academy · Lezione

Protocol Buffers e file .proto

Tipi di messaggio, servizi e generazione del codice con protoc

Protocol Buffers e file .proto è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Che cosa sono i Protocol Buffers?

Protocol Buffers (protobuf) è un formato di serializzazione binario e indipendente dal linguaggio, sviluppato da Google. È più compatto e veloce di JSON ed è il formato di trasmissione canonico di gRPC.

Sintassi dei file .proto

Definisca messaggi e servizi in un file .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; }

Numeri dei campi

Ogni campo ha un numero univoco (tag) utilizzato nella codifica binaria. Non modifichi mai i numeri dei campi esistenti dopo che lo schema è entrato in uso: la compatibilità verrebbe compromessa.

Valori predefiniti di proto3

In proto3, tutti i campi hanno valori predefiniti (0 per i numeri, "" per le stringhe, false per i bool). Non esiste una distinzione tra required e optional: ai campi mancanti viene assegnato il valore predefinito.

Installare protoc

Installi il compilatore protobuf e il plugin per 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

Generare codice Go

Esegua protoc per generare le struct Go e gli stub gRPC:

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

Tipi generati

protoc genera: una struct Go per ogni messaggio, metodi getter, un'interfaccia per il servizio, una struct server non implementata e una struct client con tutti i metodi RPC.

Campi ripetuti

Utilizzi repeated per rappresentare un elenco, che viene convertito in una slice Go:

message ListUsersResponse {
    repeated User users = 1;
}

Enum

Definisca le enumerazioni in proto3. Il primo valore deve essere 0, cioè il valore predefinito:

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

Tipi predefiniti

Il pacchetto google/protobuf fornisce tipi comuni: Timestamp, Duration, Struct (simile a JSON), Any. Li importi nel file .proto.

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

Regole di compatibilità con le versioni precedenti

Modifiche sicure: aggiungere nuovi campi, nuovi tipi di messaggio e nuovi valori enum. Modifiche non sicure: cambiare i numeri dei campi o i tipi dei campi, oppure rimuovere i campi, che diventerebbero silenziosamente uguali al valore predefinito.

Verifica rapida

Che cosa deve essere vero per i numeri dei campi in un messaggio protobuf?

Riepilogo: Protocol Buffers

Punti chiave:

  • .proto definisce i messaggi (campi + tipi) e i servizi (RPC)
  • I numeri dei campi sono permanenti: non riutilizzarli né modificarli mai
  • protoc + plugin Go genera le struct Go e gli stub gRPC
  • I campi repeated diventano slice; gli enum devono iniziare da 0

Domande Frequenti

La lezione «Protocol Buffers e file .proto» è gratuita?

Sì — il testo completo di «Protocol Buffers e file .proto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Protocol Buffers e file .proto»?

Tipi di messaggio, servizi e generazione del codice con protoc Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Protocol Buffers e file .proto»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Protocol Buffers e file .proto
  2. Implementare un servizio gRPC unary
  3. Streaming dal server e dal client
  4. Interceptor e metadati gRPC
← Torna a Go Academy