"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-08
Parcourir:603

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 :

message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
}

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

#!/bin/bash

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

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

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

//...
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"`
}
//...

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3