>  기사  >  백엔드 개발  >  gorm.Model 필드를 Protobuf 정의에 통합하는 방법은 무엇입니까?

gorm.Model 필드를 Protobuf 정의에 통합하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 06:11:02331검색

How to integrate gorm.Model fields into Protobuf definitions?

gorm.Model 필드를 Protobuf 정의에 통합

gorm.Model 필드(deleted_at, Created_at, id 등)를 proto3에 통합 특히 proto3에는 날짜/시간 유형이 없기 때문에 정의가 어려울 수 있습니다. 그러나 실행 가능한 솔루션이 있습니다.

사용자 지정 스크립트 접근 방식

protoc-gen-gorm 프로젝트가 적합하지 않은 것으로 판명되었으므로 한 가지 해결책은 사용자 지정 후처리 스크립트를 만드는 것입니다. . protobuf에서 go 파일을 생성한 후 이 스크립트는 proto3 정의 파일을 조작하여 필요한 gorm 필드를 포함할 수 있습니다.

예:

proto 파일 프로필이 있는 경우 /profile.proto:

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

표준 protoc 명령을 사용하여 초기 go 파일을 생성합니다.

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

그런 다음 gorm.sh 스크립트를 사용하여 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>

이렇게 하면 생성된 go 파일에 gorm 주석이 추가됩니다.

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

고려사항

  • 이 접근 방식에는 후처리와 대규모 프로젝트에는 적합하지 않을 수 있습니다.
  • 사용자 정의 스크립트가 protobuf 구문을 준수하는지 확인하세요.
  • 업데이트된 proto3 정의가 의도한 대로 작동하는지 확인하려면 테스트가 중요합니다.

위 내용은 gorm.Model 필드를 Protobuf 정의에 통합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.