protobuf는 다음과 같이 정의됩니다.
으아아아어떤 경우에는 protobuf 정의를 변경하지 않고 누군가로부터 hugemessage
,我想用其他字段打包它,然后将该消息传输给其他人。因此,我必须将 hugemessage
二进制文件unmarshal放入go结构中,将其打包到request
中,然后再次marshal。由于 hugemessage
的 hgue 大小,unmarshal 和 marshal 的成本难以承受。那么我可以重用 hugemessage
바이너리를 받았습니다.
syntax = "proto3" message hugemessage { // omitted } message request { string name = 1; hugemessage payload = 2; }
짧은 대답은 다음과 같습니다. 아니요. 이를 달성하는 쉽거나 표준적인 방법은 없습니다.
가장 확실한 전략은 현재 수행하는 방식으로 수행하는 것입니다. 즉, 비정렬화hugemessage
,将其设置为 request
를 한 다음 다시 마샬링하는 것입니다. Golang protobuf API 표면은 실제로 더 많은 작업을 수행할 수 있는 방법을 제공하지 않으며 그럴 만한 이유가 있습니다.
하지만 원하는 것을 달성하는 방법에는 가지가 있습니다. 그러나 이것이 반드시 안전하거나 신뢰할 수 있는 것은 아니므로 현재 가지고 있는 비용과 비교하여 그 비용을 평가해야 합니다.
정렬 해제를 방지하는 한 가지 방법은 메시지가 일반적으로 직렬화되는 방식을 활용하는 것입니다. 으아아아
..와 동일 으아아아
..가 결과입니다. payload
包含针对某些 hugemessage
调用 marshal(...)
으아아아
다음 코드:으아아아
출력equal? true
유형은 이상적이지 않습니다. rawrequest
类型必须完全镜像 request
protowire 패키지를 사용하는 것입니다. 다시 한 번 말씀드리지만, 주의가 필요합니다.
위 내용은 이를 포함하는 메시지를 마샬링할 때 기존 protobuf 바이너리를 재사용할 수 있나요? (프로토부프3)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!