--go_out: protoc-gen-go: Plugin failed with status code 1.


person.proto文件

//指定版本
//注意proto3與proto2的寫法有些不同
syntax = "proto3";
 
//包名,通過protoc生成時go文件時
option go_package="/address2";
 
//手機類型
//枚舉類型第一個字段必須為0
enum PhoneType {
    HOME = 0;
    WORK = 1;
}
 
//手機
message Phone {
    PhoneType type = 1;
    string number = 2;
}
 
//人
message Person {
    //后面的數字表示標識號
    int32 id = 1;
    string name = 2;
    //repeated表示可重復
    //可以有多個手機,列表類型
    repeated Phone phones = 3;
}
 
//聯系簿
message ContactBook {
    repeated Person persons = 1;
}

詳解

rotoc -I=./proto --go_out=. ./proto/*
protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/addressbook.proto
結果:
在/proto目錄里生成了helloworld.pb.go文件
這里option go_package 定義了導入的路徑/proto,而–go_out也定義了路徑,所有最后令–go_out=.


參數
-I:源文件的目錄(可省略)
--go_out: 設置所生成的Go代碼輸出目錄
最后一個參數表示源文件

grpc引起錯誤

proto文件中如果沒有添加option go_package = "/proto";這行會報下面這種錯誤。

protoc-gen-go: unable to determine Go import path for "proto/helloworld.proto"

Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.

原因是protoc-gen-go的不同版本兼容性問題。

解決辦法:
一是,在proto文件中加上option go_package = "/proto";
二是采用老版本的proto-gen-go,使用命令切換為v1.3.2版本 go get -u github.com/golang/protobuf/protoc-gen-go@v1.3.2

原文鏈接:https://blog.csdn.net/weixin_43851310/article/details/115431651


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM