es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

*structpb.Struct* no tiene el campo o método *Unmarshal*, *Size* y *MarshalToSizedBuffer*.

Estoy utilizando protocol buffer para definir una estructura –

“`import “google/protobuf/struct.proto”;

message MyData {
string id = 1;
google.protobuf.Struct json_field = 2;
}


Después de compilar el archivo `proto` con `protoc`, obtengo tres funciones indefinidas en `json_field` -

Error: m.JsonField.MarshalToSizedBuffer no definido (el tipo *structpb.Struct no tiene un campo o método llamado MarshalToSizedBuffer) (typecheck)
Error: m.JsonField.Size no definido (el tipo *structpb.Struct no tiene un campo o método llamado Size) (typecheck)
Error: m.JsonField.Unmarshal no definido (el tipo *structpb.Struct no tiene un campo o método llamado Unmarshal) (typecheck)


Fragmento del archivo `.pb.go` -

if m.JsonField != nil {
{
size, err := m.JsonField.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintIlo(dAtA, i, uint64(size))
}
i–
dAtA[i] = 0x7a
}
“`

No estoy seguro de cómo abordar esto ya que el archivo .pb.go se genera automáticamente durante la compilación.

Agradezco cualquier indicación al respecto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la versión de la librería google/protobuf que estás usando. Las funciones MarshalToSizedBuffer, Size y Unmarshal están definidas en el paquete github.com/golang/protobuf/proto, el cual debería ser generado automáticamente por protoc basándose en tu archivo .proto.

    Puedes intentar actualizar tu librería google/protobuf a la última versión y regenerar tu archivo pb.go usando protoc. Si eso no funciona, podrías intentar importar manualmente el paquete github.com/golang/protobuf/proto en tu código y usar las funciones desde allí.

    Alternativamente, si no necesitas la flexibilidad de una google.protobuf.Struct, podrías intentar usar un tipo de dato más simple como un map[string]interface{} o una estructura personalizada, lo cual puede ser más fácil de trabajar y menos propenso a errores.

Comments are closed.