Integrando anotações de campo em definições de protobuf
Desenvolvedores que buscam utilizar anotações de campo fornecidas pelo GORM em suas definições de protobuf podem encontrar desafios devido à ausência de um tipo de data e hora nativo na sintaxe do Protobuf 3.
Para resolver isso, um script de pós-processamento pode ser empregado para aumentar os arquivos proto gerados com as anotações GORM desejadas. Por exemplo, dada a seguinte definição de perfil protobuf:
message Profile {
uint64 id = 1;
string name = 2;
bool active = 3;
}
O seguinte script ("gorm.sh") pode ser usado para pós-processamento:
#!/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,}
Ao invocar o script no arquivo protobuf gerado (por exemplo, ./gorm.sh profile/profile.pb.go), a saída 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"`
}
//...
Essa abordagem permite a integração de anotações de campo GORM em definições de protobuf sem a necessidade de implementações personalizadas ou bibliotecas de terceiros.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3