Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk mengintegrasikan medan gorm.Model ke dalam definisi Protobuf?

Bagaimana untuk mengintegrasikan medan gorm.Model ke dalam definisi Protobuf?

Mary-Kate Olsen
Lepaskan: 2024-10-29 06:11:02
asal
352 orang telah melayarinya

How to integrate gorm.Model fields into Protobuf definitions?

Mengintegrasikan medan gorm.Model ke dalam Definisi Protobuf

Mengintegrasikan medan gorm.Model (deleted_at, created_at, id, dsb.) ke dalam proto3 takrifan boleh mencabar, terutamanya kerana proto3 tidak mempunyai jenis datetime. Walau bagaimanapun, terdapat penyelesaian yang boleh dilaksanakan.

Pendekatan Skrip Tersuai

Memandangkan projek protoc-gen-gorm terbukti tidak sesuai, satu penyelesaian ialah mencipta skrip pasca pemprosesan tersuai . Selepas menjana fail go daripada protobuf, skrip ini boleh memanipulasi fail definisi proto3 untuk memasukkan medan gorm yang diperlukan.

Contoh:

Jika kita mempunyai profil fail proto /profile.proto:

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

Janakan fail go awal menggunakan arahan protok standard:

protoc profile/profile.proto --go_out=plugins=grpc:profile
Salin selepas log masuk

Kemudian, gunakan skrip gorm.sh untuk menambah anotasi gorm:

<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>
Salin selepas log masuk

Ini akan menambah anotasi gorm pada fail go yang 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" 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>
Salin selepas log masuk

Pertimbangan

  • Pendekatan ini memerlukan pasca pemprosesan dan mungkin tidak sesuai untuk projek besar.
  • Pastikan skrip tersuai mematuhi sintaks protobuf.
  • Pengujian adalah penting untuk mengesahkan definisi proto3 yang dikemas kini berfungsi seperti yang dimaksudkan.

Atas ialah kandungan terperinci Bagaimana untuk mengintegrasikan medan gorm.Model ke dalam definisi Protobuf?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan