Maison > développement back-end > Golang > le corps du texte

Les messages Protobuf n'implémentent pas protoreflect.ProtoMessage (la méthode ProtoReflect a un récepteur de pointeur)

WBOY
Libérer: 2024-02-09 18:27:20
avant
523 Les gens l'ont consulté

Les messages Protobuf nimplémentent pas protoreflect.ProtoMessage (la méthode ProtoReflect a un récepteur de pointeur)

L'éditeur php Xinyi est là pour vous présenter un problème : dans le message Protobuf, nous avons constaté que la méthode ProtoReflect de l'interface protoreflect.ProtoMessage n'est pas implémentée, et cette méthode utilise un récepteur de pointeur. Cette question peut causer une certaine confusion et des désagréments. Dans cet article, nous examinerons les causes et les solutions possibles à ce problème pour vous aider à mieux comprendre et gérer ce problème. Découvrons-le ensemble !

Contenu de la question

J'ai un message protobuf importé "google/protobuf/any.proto" :

message mintrecord {
    ...
    google.protobuf.any data = 11;
    ...
}
Copier après la connexion

J'essaie d'utiliser anypb pour sérialiser dataun autre protobuf à l'intérieur d'un champ :

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
}
Copier après la connexion

L'erreur suivante se produit après la 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)
Copier après la connexion

D'après la documentation, je ne fais rien d'extraordinaire ici. Comment puis-je résoudre ce problème?

Voici le protobuf que j'essaie de sérialiser et de stocker dans le champ 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;
}
Copier après la connexion

Solution

sarath sadasivan pillai est correcte.
Changez votre code en :

data, err := anypb.New(&protobuf.LootcratePrize{
    Items: &protobuf.Inventory{Items: items},
    Roll:  fmt.Sprintf("%f", roll),
})
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!