Интеграция аннотаций полей в определения 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