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; // ... }
Janakan fail go awal menggunakan arahan protok standard:
protoc profile/profile.proto --go_out=plugins=grpc:profile
Kemudian, gunakan skrip gorm.sh untuk menambah anotasi gorm:
<code class="bash">#!/bin/bash g () { sed "s/json:\",omitempty\"/json:\",omitempty\" gorm:\"\"/"" } cat profile/profile.pb.go \ | g "id" "primary_key" \ | g "name" "varchar(100)" \ > profile/profile.pb.go.tmp && mv profile/profile.pb.go{.tmp,}</code>
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>
Pertimbangan
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!