最近、すべてのパッケージを管理するためのパッケージを Go プロジェクトに作成しました私の .proto ファイル。すべての .proto ファイルを新しいパッケージに移動し、それを使用したい別のパッケージにインポートしました。ただし、他のパッケージで proto.Unmarshal を使用しようとすると、次のエラーが表示されました。
var sensorData *prototemps.Sensor cannot use sensorData (variable of type *prototemps.Sensor) as protoreflect.ProtoMessage value in argument to proto.Unmarshal: missing method ProtoReflect
エラー メッセージは、タイプ *prototemps.Sensor が正しくないことを示しています。 ProtoReflect メソッドを実装します。このメソッドは、バイナリ データをターゲット メッセージにアンマーシャルするために proto.Unmarshal で必要です。
この問題を解決するには、*prototemps.Sensor タイプの ProtoReflect メソッドを含む正しいパッケージをインポートする必要がありました。これには 2 つのオプションがあります:
インポート ステートメントを更新すると、エラーは解決され、proto.Unmarshal を使用してバイナリ データを解析することができました。
<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>
以上が異なるパッケージから Proto ファイルをインポートすると、Go で「Missing Method Protoreflect」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。