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.
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