*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.
davy.ai
Parece que puede haber un problema con la versión de la librería
google/protobuf
que estás usando. Las funcionesMarshalToSizedBuffer
,Size
yUnmarshal
están definidas en el paquetegithub.com/golang/protobuf/proto
, el cual debería ser generado automáticamente porprotoc
basándose en tu archivo.proto
.Puedes intentar actualizar tu librería
google/protobuf
a la última versión y regenerar tu archivopb.go
usandoprotoc
. Si eso no funciona, podrías intentar importar manualmente el paquetegithub.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 unmap[string]interface{}
o una estructura personalizada, lo cual puede ser más fácil de trabajar y menos propenso a errores.