一篇博文搞定goctl(V1.3.0新版本解决goctl|一篇博文搞定goctl:V1.3.0新版本解决goctl rpc protoc的问题)
goctl1.3.0新命令goctl rpc protoc问题 一、官网相关描述文献地址:
- 准备工作 https://go-zero.dev/cn/prepar...
- protoc & protoc-gen-go安装 https://go-zero.dev/cn/protoc...
- rpc命令 https://go-zero.dev/cn/goctl-...
【说明】:有需要查看相关内容请搜索 推荐使用 和goctl rpc protoc greet.proto --go_out=. --go-grpc_out=. --zrpc_out=.
- 微服务 https://go-zero.dev/cn/micro-...
【说明】:有需要查看相关内容请搜索 旧版本的protoc-gen-go
不支持--go-grpc_out
- 官方仓库针对protoc说明 https://github.com/zeromicro/...
- 其他
- go环境版本(推荐1.16+), 验证安装结果 如下
go version //结果: go version go1.15.1 darwin/amd64 //我的电脑结果: go version go1.17.5 windows/amd64
安装过程看官网
- go mod开启go env GO111MODULE
go env GO111MODULE //结果: on
- goctl版本1.3.0
goctl -v goctl version 1.3.0-20220201 windows/amd64
- protoc版本3.19.4(找不到官网小版本)
下载页面 https://github.com/protocolbuffers/protobuf/releases window当前版本下载地址: https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip
- 其他
【一篇博文搞定goctl(V1.3.0新版本解决goctl|一篇博文搞定goctl:V1.3.0新版本解决goctl rpc protoc的问题)】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
验证结果:
- user.proto文件内容如下:
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); }
- user.proto目录文件夹执行如下命令:
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:D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc\protoDemo1 --go_opt=Muser.proto=.././userClient Done.
- 所有的代码会在./protoDemo1目录下面生成
- 其他
- protoc-gen-go(使用v1.26版本), 验证安装结果 如下
//1.16+版本使用go install go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
- protoc-gen-go-grpc(使用v1.1版本)
【说明】当前官方文档并没有介绍这种方式安装,默认第一种方案安装
//1.16+版本使用go install go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
【错误提醒】如果没有安装protoc-gen-go-grpc,你输入
goctl rpc protoc user.proto --go_out=./protoDemo2--go-grpc_out=./protoDemo2--zrpc_out=./protoDemo2
会出现如下报错:
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' ????????????????????????е???? ????????????? --go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1. goctl version: 1.3.0-20220201 windows/amd64 ?[0m
- user.proto文件内容同第一种方式一样:
- user.proto目录文件夹执行如下命令:
goctl rpc protoc user.proto --go_out=./protoDemo2--go-grpc_out=./protoDemo2--zrpc_out=./protoDemo2
- 所有的代码会在./protoDemo2目录下面生成
- 其他
- --go_out参数和--go-grpc_out必须保持一致,这是protoc-gen-go-grpc的命令;
- --zrpc_out参数就是第一种方式的src参数
D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctl rpc protoc --help
NAME:
goctl rpc protoc - generate grpc codeUSAGE:
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.htmlOPTIONS:
--zrpc_out valuethe zrpc output directory
--style valuethe file naming format, see [https://github.com/zeromicro/go-zero/tree/master/tools/goctl/config/readme.md]
--home valuethe goctl home path of the template
--remote valuethe 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
推荐阅读
- 由伐木工引发的陈述
- 随笔一篇
- 我为什么写不出一篇读书分享稿()
- 2018-06-29|2018-06-29 这是我的第一篇文章 markdown
- 《如何写出一篇好文章》之赠送礼物的训练
- 为了女儿,我尝试画画——DIY绘本之《一支铅笔的梦想》(绘画小白的第一篇作品)
- 自得其乐
- 开工平安
- 用|用 Python 写网络编程(二)
- 只需5步,写出让人眼前一亮的软文