異なるパッケージから Proto ファイルをインポートすると、Go で「Missing Method Protoreflect」エラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-27 02:04:03
オリジナル
404 人が閲覧しました

Why Does Importing Proto Files from Different Packages Lead to a

別のパッケージから proto ファイルをインポートすると、「メソッド protoreflect がありません」が発生します

問題

最近、すべてのパッケージを管理するためのパッケージを 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 つのオプションがあります:

  1. パッケージ "github.com/golang/protobuf/proto" をインポートします。
  2. パッケージ "google.golang.org/protobuf/proto" をインポートします。 ".

インポート ステートメントを更新すると、エラーは解決され、proto.Unmarshal を使用してバイナリ データを解析することができました。

更新された .go ファイル (リーダー)パッケージ)

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!