Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda menyepadukan medan gorm.Model ke dalam definisi Protobuf semasa mengendalikan jenis datetime, dan apakah kebaikan dan keburukan kaedah yang berbeza?

Bagaimanakah anda menyepadukan medan gorm.Model ke dalam definisi Protobuf semasa mengendalikan jenis datetime, dan apakah kebaikan dan keburukan kaedah yang berbeza?

Susan Sarandon
Susan Sarandonasal
2024-11-01 06:44:02868semak imbas

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

Penyepaduan Protobuf untuk Medan Model Gorm

Mengintegrasikan medan Gorm.Model ke dalam takrifan protobuf menjadi perlu apabila menstruktur data untuk penggunaan pangkalan data. Walaupun protobuf kekurangan jenis datetime, penyelesaian boleh dibuat dengan menyesuaikan kod protobuf yang dijana.

Penyelesaian Gagal Menggunakan protoc-gen-gorm

Percubaan untuk melaksanakan projek protoc-gen-gorm terbukti sia-sia kerana potensi pertembungan antara proto2 dan proto3 semasa proses pengadunan.

Skrip Tersuai untuk Pemprosesan Pasca

Pendekatan alternatif ialah dengan buat skrip tersuai untuk pemprosesan pasca selepas menjana fail go daripada protobuf. Berikut ialah pecahan penyelesaian:

Fail Protobuf Asal

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

Fail Protobuf Go Dijana

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

Skrip GORM Tersuai

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

Fail Protobuf Go Selepas Diproses

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

Skrip ini menambahkan tag medan gorm pada protobuf Go yang dihasilkan fail, membenarkan penyepaduan definisi protobuf dengan medan gorm.Model untuk interaksi pangkalan data yang lancar.

Atas ialah kandungan terperinci Bagaimanakah anda menyepadukan medan gorm.Model ke dalam definisi Protobuf semasa mengendalikan jenis datetime, dan apakah kebaikan dan keburukan kaedah yang berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn