Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Mengimport Fail Proto daripada Pakej Berlainan Membawa kepada Ralat \"Protoreflect Kaedah Hilang\" dalam Go?

Mengapa Mengimport Fail Proto daripada Pakej Berlainan Membawa kepada Ralat \"Protoreflect Kaedah Hilang\" dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 02:04:03396semak imbas

Why Does Importing Proto Files from Different Packages Lead to a

Mengimport fail proto daripada pakej berbeza menyebabkan 'protoreflect kaedah hilang'

Masalah

Saya baru-baru ini mencipta pakej dalam projek Go saya untuk mengurus semua fail .proto saya. Saya mengalihkan semua fail .proto saya ke pakej baharu dan mengimportnya ke dalam pakej lain di mana saya mahu menggunakannya. Walau bagaimanapun, apabila saya cuba menggunakan proto.Unmarshal dalam pakej lain, saya menerima ralat berikut:

var sensorData *prototemps.Sensor
cannot use sensorData (variable of type *prototemps.Sensor) as protoreflect.ProtoMessage value in argument to proto.Unmarshal: missing method ProtoReflect

Penyelesaian

Mesej ralat menunjukkan bahawa jenis *prototemps.Sensor tidak melaksanakan kaedah ProtoReflect. Kaedah ini diperlukan oleh proto.Unmarshal untuk menyahmarshal data binari ke dalam mesej sasaran.

Untuk menyelesaikan isu ini, saya perlu mengimport pakej yang betul yang mengandungi kaedah ProtoReflect untuk jenis *prototemps.Sensor. Terdapat dua pilihan untuk ini:

  1. Import pakej "github.com/golang/protobuf/proto".
  2. Import pakej "google.golang.org/protobuf/proto ".

Setelah saya mengemas kini penyata import, ralat telah diselesaikan dan saya berjaya menggunakan proto.Unmarshal untuk menghuraikan data binari.

Fail .go yang dikemas kini (Pembaca Pakej)

<code class="go">package reader

import (
    "github.com/golang/protobuf/proto" // Import the correct package containing ProtoReflect

    prototemps "github.com/your-org/your-repo/prototemps" // Import the prototemps package containing the Sensor
)

func main() {
    sensorData := &prototemps.Sensor{}
    err := proto.Unmarshal(msg.Payload(), sensorData) 
    if err != nil {
        // Handle error
    }
}</code>

Atas ialah kandungan terperinci Mengapa Mengimport Fail Proto daripada Pakej Berlainan Membawa kepada Ralat \"Protoreflect Kaedah Hilang\" dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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