一篇博文搞定goctl:V1.3.2新版本解决goctl rpc protoc的问题

goctl1.3.2新命令goctl rpc protoc问题

【文档参考价值】官方1.3.4版本已经有goctl env check -i -f –verbose自动安装,文档价值仅供学习参考
【说明】:官方文档很分散,强烈建议以我的文档为主

一、官网相关描述文献地址:

  1. 准备工作 go-zero.dev/cn/prepare.html

  2. protoc & protoc-gen-go安装 go-zero.dev/cn/protoc-install.html

  3. rpc命令 go-zero.dev/cn/goctl-rpc.html

    【说明】:有需要查看相关内容请搜索 推荐使用 和goctl rpc protoc greet.proto –go_out=. –go-grpc_out=. –zrpc_out=.

  4. 微服务 go-zero.dev/cn/micro-service.html

    【说明】:有需要查看相关内容请搜索 旧版本的 protoc-gen-go 不支持 --go-grpc_out

  5. 官方仓库针对protoc说明 github.com/zeromicro/go-zero/issue...

  6. 其他

二、相同版本环境:

需要安装如下版本软件:

  1. go环境版本(推荐1.16+), 验证安装结果 如下

    ```go
    go version
    //结果:
    go version go1.15.1 darwin/amd64
    //我的电脑结果:
    go version go1.17.5 windows/amd64
    ```

    安装过程看官网

  2. go mod开启go env GO111MODULE

    ```go
    go env GO111MODULE
    //结果:
    on
    ```
  3. goctl版本1.3.0

    goctl -v
    goctl version 1.3.2 windows/amd64
  4. protoc版本3.19.4(找不到官网小版本)

    ```go
    下载页面
    https://github.com/protocolbuffers/protobuf/releases
    window当前版本下载地址:
    https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip
    ```
  5. 其他

第一种方式:goctl rpc proto命令生成rpc代码(这种方式未来确定会废弃)

需要安装如下版本软件:

1.protoc-gen-go(使用v1.3.2), 验证安装结果 如下

//1.16+版本使用go install
go install github.com/golang/protobuf/protoc-gen-go@v1.3.2
go get -u github.com/golang/protobuf/protoc-gen-go@v1.3.2

验证结果:

  1. user.proto文件内容如下:

    ```go
    syntax = "proto3";
    
    package user;
    
    // protoc-gen-go 版本大于1.4.0, proto文件需要加上go_package,否则无法生成
    option go_package = "./userClient";
    
    message IdRequest {
        string id = 1;
    }
    
    message UserResponse {
        // 用户id
        string id = 1;
        // 用户名称
        string name = 2;
        // 用户性别
        string gender = 3;
    }
    
    service User {
        rpc getUser(IdRequest) returns(UserResponse);
    }
    ```
  2. user.proto目录文件夹执行如下命令:

    ```go
    goctl rpc proto -src user.proto -dir ./protoDemo1
    
    //结果
    D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctl rpc proto -src user.proto -dir ./protoDemo1
    deprecated: use "goctl rpc protoc" instead, for the details see "goctl rpc protoc --help"
    protoc  --proto_path=D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc user.proto --go_out=plugins=grpc\Tools\Go\Code\src\go-zero-demo\mall\user\rpc\protoDemo1 --go_opt=Muser.proto=.././userClient
    Done.
    ```
  3. 所有的代码会在./protoDemo1目录下面生成

  4. 其他

第二种方式:goctl rpc protoc命令生成rpc代码(未来版本会使用这种方式)

需要安装如下版本软件:

  1. protoc-gen-go(使用v1.26版本), 验证安装结果 如下

    ```go
    //1.16+版本使用go install
    go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
    
    go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
    ```
  2. protoc-gen-go-grpc(使用v1.1版本)

    【说明】当前官方文档并没有介绍这种方式安装,默认第一种方案安装

    ```go
    //1.16+版本使用go install
    go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
    
    go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
    ```

    【错误提醒】如果没有安装protoc-gen-go-grpc,你输入

    ```go
    goctl rpc protoc user.proto --go_out=./protoDemo2  --go-grpc_out=./protoDemo2  --zrpc_out=./protoDemo2
    ```

    会出现如下报错:

    ```go
    D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctl rpc protoc user.proto --go_out=./protoDemo2  --go-grpc_out=./protoDemo2  --zrpc_out=./protoDemo2
    protoc user.proto --go_out=./protoDemo2 --go-grpc_out=./protoDemo2
    ?[31mgoctl: generation error: 'protoc-gen-go-grpc' �����ڲ����ⲿ���Ҳ���ǿ����еij���
    ���������ļ���
    --go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.
    goctl version: 1.3.0-20220201 windows/amd64
    ?[0m
    ```

验证结果:

  1. user.proto文件内容同第一种方式一样:

  2. user.proto目录文件夹执行如下命令:

    ```go
    goctl rpc protoc user.proto --go_out=./protoDemo2  --go-grpc_out=./protoDemo2  --zrpc_out=./protoDemo2
    ```
  3. 所有的代码会在./protoDemo2目录下面生成

  4. 其他

goctl rpc protoc –help命令讲解:

  1. –go_out参数和–go-grpc_out必须保持一致,这是protoc-gen-go-grpc的命令;

  2. –zrpc_out参数就是第一种方式的src参数

    ```go
    D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctl rpc protoc --help
    NAME:
       goctl rpc protoc - generate grpc code
    
    USAGE:
       example: goctl rpc protoc xx.proto --go_out=./pb --go-grpc=./pb --zrpc_out=.
    
    DESCRIPTION:
       for details, see https://go-zero.dev/cn/goctl-rpc.html
    
    OPTIONS:
       --zrpc_out value  the zrpc output directory
       --style value     the file naming format, see [https://github.com/zeromicro/go-zero/tree/master/tools/goctl/config/readme.md]
       --home value      the goctl home path of the template
       --remote value    the remote git repo of the template, --home and --remote cannot be set at the same time, if they are, --remote has higher priority
                         The git repo directory must be consistent with the https://github.com/zeromicro/go-zero-template directory structure
    ```
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!