>백엔드 개발 >Golang >날짜/시간 유형을 처리하면서 gorm.Model 필드를 Protobuf 정의에 어떻게 통합합니까? 그리고 다양한 방법의 장단점은 무엇입니까?

날짜/시간 유형을 처리하면서 gorm.Model 필드를 Protobuf 정의에 어떻게 통합합니까? 그리고 다양한 방법의 장단점은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-01 06:44:02944검색

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

Gorm 모델 필드를 위한 Protobuf 통합

데이터베이스 사용을 위해 데이터를 구조화할 때 gorm.Model 필드를 protobuf 정의에 통합하는 것이 필요합니다. protobuf에는 날짜/시간 유형이 없음에도 불구하고 생성된 protobuf 코드를 사용자 정의하여 솔루션을 고안할 수 있습니다.

protoc-gen-gorm을 사용하여 실패한 솔루션

protoc-gen-gorm 프로젝트는 혼합 과정에서 proto2와 proto3 사이의 잠재적인 충돌로 인해 무익한 것으로 판명되었습니다.

후처리를 위한 사용자 정의 스크립트

대체 접근 방식은 다음과 같습니다. protobuf에서 go 파일을 생성한 후 사후 처리를 위한 사용자 정의 스크립트를 만듭니다. 솔루션 분석은 다음과 같습니다.

원본 Protobuf 파일

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

생성된 Protobuf Go 파일

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

사용자 정의 GORM 스크립트

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

후처리된 Protobuf Go 파일

<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 Go에 gorm 필드 태그를 추가합니다. 원활한 데이터베이스 상호 작용을 위해 protobuf 정의를 gorm.Model 필드와 통합할 수 있습니다.

위 내용은 날짜/시간 유형을 처리하면서 gorm.Model 필드를 Protobuf 정의에 어떻게 통합합니까? 그리고 다양한 방법의 장단점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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