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
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:
Setelah saya mengemas kini penyata import, ralat telah diselesaikan dan saya berjaya menggunakan proto.Unmarshal untuk menghuraikan data binari.
<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!