"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo integrar anotaciones de campo GORM en definiciones de Protobuf?

¿Cómo integrar anotaciones de campo GORM en definiciones de Protobuf?

Publicado el 2024-11-08
Navegar:826

How to Integrate GORM Field Annotations into Protobuf Definitions?

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.

Último tutorial Más>

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