[GO] Résumé de l'écriture des fichiers .proto utilisés dans gRPC

--Dans gRPC, les données sont échangées par sérialisation au format Protocol Buffers.

Échantillon entier

//Définition de version
syntax = "proto3";

//Définition du package
package sample;

// import
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";

//Définition du service et de la méthode RPC
service SampleService {
    rpc Sample (SampleRequest) returns (SampleResponse);

    //Serveur de streaming RPC
    rpc SampleServerStreamMethod (SampleRequest) returns (stream SampleResponse);

    //Client streaming RPC
    rpc SampleClientStreamMethod (stream SampleRequest) returns (SampleResponse)

    //RPC de streaming bidirectionnel
    rpc SampleBidirectionalMethod (stream SampleRequest) returns (stream SampleResponse)
}

message SampleRequest {
    string name = 1;
}

message SampleResponse {
    Sample sample = 1;
}


//Type de message
//Le numéro à droite est le "numéro de tag"
message Sample {
    //Type scalaire
    //Il y a des nombres, des chaînes, des booléens, des tableaux d'octets
    int32 id = 1;
    string name = 2;
    bool isBool = 3;

    //obsolète Spécifiez les champs obsolètes et obsolètes
    string duplicated_field = 4 [deprecated = true]

    //identifiant réservé Numéro d'étiquette abandonnée
    reserved 7, 8, 10 to 12;

    //Liste (tableau)
    //Le tableau multidimensionnel ne peut pas être défini
    repeated SampleList sample_list = 5;

    //Carte (tableau associatif)
    map<string, string> sample_map = 6;

    //N'importe lequel de plusieurs
    oneof message {
        string one = 1;
        string other = 2;
    }

    // Well Known Types
    google.protobuf.Duration sample_duration = 9;
    google.protobuf.Timestamp create_time = 13;

    //Type d'énumération
    enum SampleEnum {
        UNKNOWN = 0;
        TEST1 = 1;
        TEST2 = 2;
        TEST3 = 3;
    }

}

Définition de version

syntax = "proto3";

Définition du package

package sample;

import

import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";

Services et méthodes RPC

service SampleService {
    rpc Sample (SampleRequest) returns (SampleResponse);

    //Serveur streaming RPC
    rpc SampleServerStreamMethod (SampleRequest) returns (stream SampleResponse);

    //Client streaming RPC
    rpc SampleClientStreamMethod (stream SampleRequest) returns (SampleResponse);

    //RPC de streaming bidirectionnel
    rpc SampleBidirectionalMethod (stream SampleRequest) returns (stream SampleResponse);
}

Type scalaire

Type de données Valeur par défaut
string Caractères vides
bytes Tableau vide
bool false
Valeur numérique 0
enum La première valeur définie. Doit être 0
Type de message Dépend de la mise en œuvre
repeated Tableau vide

Type de message

--Type avec plusieurs champs --Numéro d'étiquette

message Sample {
    //Type scalaire
    //Il y a des nombres, des chaînes, des booléens, des tableaux d'octets
    int32 id = 1;
    string name = 2;
    bool isBool = 3;

    //obsolète Spécifiez les champs qui sont obsolètes et obsolètes
    string duplicated_field = 4 [deprecated = true]

    //identifiant réservé Numéro d'étiquette abandonnée
    reserved 7, 8, 10 to 12;

  //~ Omis ~
}

Liste (tableau)

--Un tableau peut être défini en préfixant le type avec --Peut être utilisé pour le type scalaire et le type de message

    //Liste (tableau)
    //Le tableau multidimensionnel ne peut pas être défini
    repeated SampleList sample_list = 5;

Carte (tableau associatif)

    map<string, string> sample_map = 6;

Type d'énumération

    //Type d'énumération
    enum SampleEnum {
        UNKNOWN = 0;
        TEST1 = 1;
        TEST2 = 2;
        TEST3 = 3;
    }

oneof

    oneof message {
        string one = 1;
        string other = 2;
    }

Well Known Types --Type de message défini par Google

    google.protobuf.Duration sample_duration = 9;
    google.protobuf.Timestamp create_time = 13;

Génération de code

référence

Recommended Posts

Résumé de l'écriture des fichiers .proto utilisés dans gRPC
Résumé de la façon d'importer des fichiers dans Python 3
Résumé de l'écriture d'AWS Lambda
Résumé de l'utilisation de MNIST avec Python
Résumé de l'utilisation de pandas.DataFrame.loc
Comment écrire sobrement avec des pandas
Résumé de l'utilisation de pyenv-virtualenv
Résumé de l'utilisation de csvkit
Comment afficher une colonne de fichiers spécifiée sous Linux (awk)
[Python] Résumé de l'utilisation des pandas
Résumé des méthodes fréquemment utilisées chez les pandas
Résumé des commandes fréquemment utilisées dans matplotlib
[Python2.7] Résumé de l'utilisation d'unittest
Résumé de l'utilisation de la liste Python
[Python2.7] Résumé de l'utilisation du sous-processus
Comment lire des fichiers CSV avec Pandas
Comment écrire ce processus en Perl?
Comment écrire Ruby to_s en Python
Résumé de ce qui a été utilisé dans 100 coups de Pandas (# 1 ~ # 32)
Résumé des outils utilisés dans la ligne de commande vol.8
Résumé des outils utilisés dans la ligne de commande vol.5
Comment vérifier / extraire des fichiers dans un package RPM
Comment obtenir les fichiers dans le dossier [Python]
Comment écrire un document tuple nommé en 2020
Comment savoir quel type de fichier est stocké dans S3 en Python
Comment écrire un fichier auquel vous devez faire attention dans toutes les langues
Comment obtenir une liste de fichiers dans le même répertoire avec python
20e Comment écrire des problèmes en temps réel hors ligne en Python
[Blender] Résumé de la procédure d'installation / de mise à jour / de désinstallation des modules complémentaires
Comment écrire un type liste / dictionnaire de Python3
Comment charger des fichiers dans Google Drive avec Google Colaboratory
Comment afficher plusieurs images d'une galaxie en tuiles
Comment utiliser des variables dans les fichiers de définition d'unité systemd
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Comment ajouter des numéros de page à un fichier PDF (en Python)
Comment télécharger des fichiers dans la vue de classe générique Django
[Python] Résumé de la façon de spécifier la couleur de la figure
Comment référencer des fichiers statiques dans un projet Django
Résumé de la façon de partager l'état avec plusieurs fonctions
Comment écrire une validation personnalisée dans Django REST Framework
Comment trouver le nombre optimal de clusters pour les k-moyennes
Comment se débarrasser des pictogrammes personnalisés du serveur dans message.content
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
[python] Résumé de la récupération des listes et des éléments du dictionnaire
[Mis à jour de temps en temps] Résumé des modèles de conception en Java
[Python] Comment écrire une instruction if en une phrase.
Comment activer la lecture / écriture de net.Conn avec Golang pour annuler avec le contexte
[Linux] [C / C ++] Résumé de la façon d'obtenir pid, ppid, tid
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment obtenir une liste d'exceptions intégrées pour python
Comment développer en Python
Comment obtenir un aperçu de vos données dans Pandas
Une commande pour lister tous les fichiers par ordre de nom de fichier
Partie 1 J'ai écrit la réponse au problème de référence de l'écriture hors ligne en temps réel en Python
Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Comment déterminer l'existence d'un élément sélénium en Python
[Hugo] Résumé de la façon d'ajouter des pages au site créé avec Learn