


Protobuf messages do not implement protoreflect.ProtoMessage (ProtoReflect method has pointer receiver)
Feb 09, 2024 pm 06:27 PMphp editor Xinyi is here to introduce a problem: in the Protobuf message, we found that the ProtoReflect method of the protoreflect.ProtoMessage interface is not implemented, and this method uses pointer reception device. This question may cause some confusion and inconvenience. In this article, we will delve into the causes and possible solutions to this problem to help you better understand and deal with this problem. Let’s find out together!
Question content
I have a protobuf message imported "google/protobuf/any.proto"
:
message mintrecord { ... google.protobuf.any data = 11; ... }
I'm trying to use anypb to serialize another protobuf inside the data
field:
data, err := anypb.new(protobuf.lootcrateprize{ items: &protobuf.inventory{items: items}, roll: fmt.sprintf("%f", roll), }) if err != nil { log.println("[lootbox] err: error marshalling lootcrate prize data into mintrec", err) } else { mintrecordproto.data = data }
The following error occurs after compilation:
cannot use protobuf.lootcrateprize{…} (value of type protobuf.lootcrateprize) as type protoreflect.protomessage in argument to anypb.new: protobuf.lootcrateprize does not implement protoreflect.protomessage (protoreflect method has pointer receiver)
According to the documentation, I'm not doing anything unusual here. How can I solve this problem?
This is the protobuf I try to serialize and store inside the data
field:
lootcrate.proto:
syntax = "proto3"; package protobuf; option go_package = "protobuf/"; import "protobuf/inventory.proto"; import "protobuf/flowerdbservice.proto"; message LootcratePrize { Inventory items = 1; repeated NFT flowers = 2; string roll = 3; }
Solution
sarath sadasivan pillai is correct.
Change your code to:
data, err := anypb.New(&protobuf.LootcratePrize{ Items: &protobuf.Inventory{Items: items}, Roll: fmt.Sprintf("%f", roll), })
The above is the detailed content of Protobuf messages do not implement protoreflect.ProtoMessage (ProtoReflect method has pointer receiver). For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The price of Bitcoin since its birth 2009-2025 The most complete summary of BTC historical prices

What to do if the time is gone in the lower right corner of Windows 11_What to do if the time is gone in the lower right corner of Windows 11

Are there any community forums or discussion groups for Java functions where I can ask questions and discuss them?

How to use other people's code in python

Common exception types and their repair measures in Java function development

What should I do if the time on my win11 computer is always wrong? How to adjust the wrong time on Windows 11 computer

Doesn't anyone take care of Douyin's random accounts? Can I appeal a second time?
