Heim  >  Artikel  >  Backend-Entwicklung  >  Wie integrieren Sie gorm.Model-Felder in Protobuf-Definitionen beim Umgang mit Datetime-Typen und was sind die Vor- und Nachteile verschiedener Methoden?

Wie integrieren Sie gorm.Model-Felder in Protobuf-Definitionen beim Umgang mit Datetime-Typen und was sind die Vor- und Nachteile verschiedener Methoden?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 06:44:02868Durchsuche

How do you integrate gorm.Model fields into Protobuf definitions while handling datetime types, and what are the pros and cons of different methods?

Protobuf-Integration für Gorm-Modellfelder

Die Integration von gorm.Model-Feldern in Protobuf-Definitionen wird erforderlich, wenn Daten für die Datenbankverwendung strukturiert werden. Obwohl protobuf keinen datetime-Typ hat, kann eine Lösung durch Anpassen des generierten protobuf-Codes entwickelt werden.

Fehlgeschlagene Lösung mit protoc-gen-gorm

Versuche, das zu implementieren Das Protoc-Gen-Gorm-Projekt erwies sich aufgrund möglicher Konflikte zwischen Proto2 und Proto3 während des Mischvorgangs als erfolglos.

Benutzerdefiniertes Skript für die Nachbearbeitung

Ein alternativer Ansatz ist Erstellen Sie ein benutzerdefiniertes Skript für die Nachbearbeitung, nachdem Sie Go-Dateien aus Protobuf generiert haben. Hier ist eine Aufschlüsselung der Lösung:

Original-Protobuf-Datei

<code class="proto">message Profile {
  uint64 id = 1;
  string name = 2;
  bool active = 3;
}</code>

Generierte Protobuf-Go-Datei

<code class="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"`
    Name   string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
    Active bool   `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"`
}</code>

Benutzerdefiniertes GORM-Skript

<code class="bash">g () {
  sed "s/json:\",omitempty\"/json:\",omitempty\" gorm:\"type:\"/"
}

cat  \
| g "id" "primary_key" \
| g "name" "varchar(100)" \
> .tmp && mv {.tmp,}</code>

Nachbearbeitete Protobuf-Go-Datei

<code class="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"`
}</code>

Dieses Skript fügt dem generierten Protobuf-Go Gorm-Feld-Tags hinzu Datei, die die Integration von Protobuf-Definitionen mit gorm.Model-Feldern für nahtlose Datenbankinteraktionen ermöglicht.

Das obige ist der detaillierte Inhalt vonWie integrieren Sie gorm.Model-Felder in Protobuf-Definitionen beim Umgang mit Datetime-Typen und was sind die Vor- und Nachteile verschiedener Methoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn