Maison  >  Article  >  développement back-end  >  Comment intégrer les annotations de champs GORM dans les définitions Protobuf ?

Comment intégrer les annotations de champs GORM dans les définitions Protobuf ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 04:27:03674parcourir

How to Integrate GORM Field Annotations into Protobuf Definitions?

Intégration des annotations de champ dans les définitions de Protobuf

Les développeurs cherchant à utiliser les annotations de champ fournies par GORM dans leurs définitions de protobuf peuvent rencontrer des difficultés en raison de l'absence d'un type datetime natif dans la syntaxe Protobuf 3.

Pour résoudre ce problème, un script de post-traitement peut être utilisé pour augmenter les fichiers proto générés avec les annotations GORM souhaitées. Par exemple, étant donné la définition de profil protobuf suivante :

<code class="protobuf">message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
}</code>

Le script suivant ("gorm.sh") peut être utilisé pour le post-traitement :

<code class="bash">#!/bin/bash

g () {
  sed "s/json:\",omitempty\"/json:\",omitempty\" gorm:\"\"/"
}

cat  \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> .tmp && mv {.tmp,}</code>

En appelant le script sur le fichier protobuf généré (par exemple, ./gorm.sh profile/profile.pb.go), le résultat résultant sera :

<code class="protobuf">//...
type Profile struct {
    state         protoimpl.MessageState
    sizeCache     protoimpl.SizeCache
    unknownFields protoimpl.UnknownFields

    Id     uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty" gorm:"type:primary_key"`
    Name   string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty" gorm:"type:varchar(100)"`
    Active bool   `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
}
//...</code>

Cette approche permet l'intégration des annotations de champ GORM dans les définitions de protobuf sans le besoin d'implémentations personnalisées ou de bibliothèques tierces.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn