Integración de anotaciones de campo en definiciones de Protobuf
Los desarrolladores que buscan utilizar anotaciones de campo proporcionadas por GORM dentro de sus definiciones de protobuf pueden encontrar desafíos debido a la ausencia de un tipo de fecha y hora nativo en la sintaxis de Protobuf 3.
Para solucionar este problema, se puede emplear un script de posprocesamiento para aumentar los archivos proto generados con las anotaciones GORM deseadas. Por ejemplo, dada la siguiente definición de perfil de protobuf:
message Profile {
uint64 id = 1;
string name = 2;
bool active = 3;
}
El siguiente script ("gorm.sh") se puede utilizar para el posprocesamiento:
#!/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,}
Al invocar el script en el archivo protobuf generado (por ejemplo, ./gorm.sh perfil/profile.pb.go), el resultado resultante será:
//...
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"`
}
//...
Este enfoque permite la integración de anotaciones de campos GORM en definiciones de protobuf sin la necesidad de implementaciones personalizadas o bibliotecas de terceros.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3