데이터베이스 사용을 위해 데이터를 구조화할 때 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!