web-dev-qa-db-ja.com

未定義:proto.ProtoPackageIsVersion3

: ../.../...pb.go:21:11: undefined: proto.ProtoPackageIsVersion3を取得します。バージョン2にしたい

https://github.com/google/protobuf/releases $ protoc --versionからprotocをインストールすると、libprotoc 3.6.0になります。 aptからgolang-goprotobuf-devもインストールしました。

質問:

  1. protoc(protobufferコンパイラは常にバージョンProto3にコンパイルされますか?)
  2. 必要な追加のgoサポートは何ですか?
  3. Proto2にコンパイルするコンパイラを入手するにはどうすればよいですか?
  4. 1つのシステムでlibproto 3.6.1がproto2にコンパイルされることに気付きましたが、これは理解できません。
8
Abhishek Bhatia
  1. protoc(protobufferコンパイラは常にバージョンProto3にコンパイルされますか?)

    Protobufのバージョンとprotoc-gen-goのバージョンによって異なります。

  2. 必要な追加のgoサポートは何ですか?

    protoc-gen-go をインストールする必要があると思います

  3. Proto2にコンパイルするコンパイラを入手するにはどうすればよいですか?

    Protoc-gen-goの特定のバージョンをインストールします

    GIT_TAG="v1.2.0" # change as needed
    go get -d -u github.com/golang/protobuf/protoc-gen-go
    git -C "$(go env GOPATH)"/src/github.com/golang/protobuf checkout $GIT_TAG
    go install github.com/golang/protobuf/protoc-gen-go
    
  4. 1つのシステムでlibproto 3.6.1がproto2にコンパイルされることに気付きましたが、これは理解できません。

    これについてはわかりませんが、正しく覚えていれば、決定要因はprotoc-gen-goバージョンです。

それが役に立てば幸い!

8
Andy Aldo

次のエラーが発生した場合:

   undefined: proto.ProtoPackageIsVersion3

protoc-gen-goのバージョンが正しくないためです。

 $ git clone https://github.com/golang/protobuf
 $ cd ~/protobuf/protoc-gen-go
 $ git checkout tags/v1.2.0 -b v1.2.0
 $ go install

お役に立てば幸いです!

2
xiaolong ran