Rumah > pembangunan bahagian belakang > Golang > Mesej Protobuf tidak melaksanakan protoreflect.ProtoMessage (kaedah ProtoReflect mempunyai penerima penunjuk)

Mesej Protobuf tidak melaksanakan protoreflect.ProtoMessage (kaedah ProtoReflect mempunyai penerima penunjuk)

WBOY
Lepaskan: 2024-02-09 18:27:20
ke hadapan
571 orang telah melayarinya

Mesej Protobuf tidak melaksanakan protoreflect.ProtoMessage (kaedah ProtoReflect mempunyai penerima penunjuk)

editor php Xinyi di sini untuk memperkenalkan masalah kepada anda: dalam mesej Protobuf, kami mendapati bahawa kaedah ProtoReflect antara muka protoreflect.ProtoMessage tidak dilaksanakan, dan kaedah ini menggunakan penerima penuding. Soalan ini boleh menyebabkan sedikit kekeliruan dan kesulitan. Dalam artikel ini, kami akan menyelidiki punca dan kemungkinan penyelesaian untuk masalah ini untuk membantu anda memahami dan menangani masalah ini dengan lebih baik. Mari kita ketahui bersama!

Kandungan soalan

Saya ada mesej protobuf yang diimport "google/protobuf/any.proto":

message mintrecord {
    ...
    google.protobuf.any data = 11;
    ...
}
Salin selepas log masuk

Saya cuba menggunakan anypb untuk bersiri dataprotobuf lain di dalam medan:

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
}
Salin selepas log masuk

Ralat berikut berlaku selepas penyusunan:

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)
Salin selepas log masuk

Menurut dokumentasi, saya tidak melakukan perkara luar biasa di sini. Bagaimanakah saya boleh menyelesaikan masalah ini?

Ini adalah protobuf yang saya cuba sirikan dan simpan di dalam medan data: 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;
}
Salin selepas log masuk

Penyelesaian

sarath sadasivan pilai betul.
Tukar kod anda kepada:

data, err := anypb.New(&protobuf.LootcratePrize{
    Items: &protobuf.Inventory{Items: items},
    Roll:  fmt.Sprintf("%f", roll),
})
Salin selepas log masuk

Atas ialah kandungan terperinci Mesej Protobuf tidak melaksanakan protoreflect.ProtoMessage (kaedah ProtoReflect mempunyai penerima penunjuk). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan