Heim >Backend-Entwicklung >Golang >Wie integriere ich gorm.Model-Felder in Protobuf-Definitionen?

Wie integriere ich gorm.Model-Felder in Protobuf-Definitionen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 06:11:02383Durchsuche

How to integrate gorm.Model fields into Protobuf definitions?

Integration von gorm.Model-Feldern in Protobuf-Definitionen

Integration der gorm.Model-Felder (gelöscht_at, erstellt_at, id usw.) in proto3 Definitionen können eine Herausforderung sein, insbesondere da Proto3 keinen Datetime-Typ hat. Es gibt jedoch praktikable Lösungen.

Benutzerdefinierter Skript-Ansatz

Da sich das Projekt protoc-gen-gorm als ungeeignet erwiesen hat, besteht eine Lösung darin, ein benutzerdefiniertes Nachbearbeitungsskript zu erstellen . Nach dem Generieren der Go-Dateien aus Protobuf kann dieses Skript die Proto3-Definitionsdatei so bearbeiten, dass sie die erforderlichen Gorm-Felder enthält.

Beispiel:

Wenn wir ein Proto-Dateiprofil haben /profile.proto:

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

Generieren Sie die anfängliche Go-Datei mit dem Standardprotokollbefehl:

protoc profile/profile.proto --go_out=plugins=grpc:profile

Verwenden Sie dann das Skript gorm.sh, um die Gorm-Anmerkungen hinzuzufügen:

<code class="bash">#!/bin/bash

g () {
  sed "s/json:\",omitempty\"/json:\",omitempty\" gorm:\"\"/&quot;"
}

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

Dadurch werden die Gorm-Anmerkungen zur generierten GO-Datei hinzugefügt:

<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>

Überlegungen

  • Dieser Ansatz erfordert eine Nachbearbeitung und ist möglicherweise nicht für große Projekte geeignet.
  • Stellen Sie sicher, dass das benutzerdefinierte Skript der Protobuf-Syntax entspricht.
  • Tests sind entscheidend, um zu überprüfen, ob die aktualisierten Proto3-Definitionen wie beabsichtigt funktionieren.

Das obige ist der detaillierte Inhalt vonWie integriere ich gorm.Model-Felder in Protobuf-Definitionen?. 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