«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как интегрировать аннотации полей GORM в определения Protobuf?

Как интегрировать аннотации полей GORM в определения Protobuf?

Опубликовано 8 ноября 2024 г.
Просматривать:641

How to Integrate GORM Field Annotations into Protobuf Definitions?

Интеграция аннотаций полей в определения Protobuf

Разработчики, желающие использовать аннотации полей, предоставленные GORM, в своих определениях protobuf, могут столкнуться с проблемами из-за их отсутствия собственного типа datetime в синтаксисе Protobuf 3.

Для решения этой проблемы можно использовать сценарий постобработки, чтобы дополнить сгенерированные файлы прототипов желаемыми аннотациями GORM. Например, учитывая следующее определение профиля protobuf:

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

Для постобработки можно использовать следующий скрипт ("gorm.sh"):

#!/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,}

При вызове сценария для сгенерированного файла protobuf (например, ./gorm.sh Profile/profile.pb.go) результат будет следующим:

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

Этот подход позволяет интегрировать аннотации полей GORM в определения protobuf без необходимости использования пользовательских реализаций или сторонних библиотек.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3