Maison > développement back-end > Golang > Comment intégrer les champs gorm.Model dans les définitions Protobuf ?

Comment intégrer les champs gorm.Model dans les définitions Protobuf ?

Mary-Kate Olsen
Libérer: 2024-10-29 06:11:02
original
352 Les gens l'ont consulté

How to integrate gorm.Model fields into Protobuf definitions?

Intégration des champs gorm.Model dans les définitions Protobuf

Intégration des champs gorm.Model (deleted_at, create_at, id, etc.) dans proto3 les définitions peuvent être difficiles, d'autant plus que proto3 n'a pas de type datetime. Cependant, il existe des solutions réalisables.

Approche de script personnalisé

Le projet protoc-gen-gorm s'étant révélé inadapté, une solution consiste à créer un script de post-traitement personnalisé. . Après avoir généré les fichiers go à partir de protobuf, ce script peut manipuler le fichier de définition proto3 pour inclure les champs gorm nécessaires.

Exemple :

Si nous avons un profil de fichier proto /profile.proto :

message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
  // ...
}
Copier après la connexion

Générez le fichier go initial à l'aide de la commande protoc standard :

protoc profile/profile.proto --go_out=plugins=grpc:profile
Copier après la connexion

Ensuite, utilisez le script gorm.sh pour ajouter les annotations gorm :

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

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

cat profile/profile.pb.go \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> profile/profile.pb.go.tmp &amp;&amp; mv profile/profile.pb.go{.tmp,}</code>
Copier après la connexion

Cela ajoutera les annotations gorm au fichier go généré :

<code class="go">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>
Copier après la connexion

Considérations

  • Cette approche nécessite un post-traitement et peut ne pas convenir aux grands projets.
  • Assurez-vous que le script personnalisé adhère à la syntaxe protobuf.
  • Les tests sont cruciaux pour vérifier que les définitions proto3 mises à jour fonctionnent comme prévu.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal