goctl1.3.0新命令goctl rpc protoc問(wèn)題
一、官網(wǎng)相關(guān)描述文獻(xiàn)地址:
準(zhǔn)備工作? https://go-zero.dev/cn/prepare.html
protoc & protoc-gen-go安裝? ? https://go-zero.dev/cn/protoc-install.html
rpc命令? ? ? https://go-zero.dev/cn/goctl-rpc.html?
【說(shuō)明】:有需要查看相關(guān)內(nèi)容請(qǐng)搜索? 推薦使用? 和goctl rpc protoc greet.proto --go_out=. --go-grpc_out=. --zrpc_out=.
微服務(wù)? ? ? https://go-zero.dev/cn/micro-service.html
【說(shuō)明】:有需要查看相關(guān)內(nèi)容請(qǐng)搜索? ? 舊版本的 protoc-gen-go 不支持 --go-grpc_out
官方倉(cāng)庫(kù)針對(duì)protoc說(shuō)明 https://github.com/zeromicro/go-zero/issues/1226
其他
二、相同版本環(huán)境:
需要安裝如下版本軟件:
go環(huán)境版本(推薦1.16+), 驗(yàn)證安裝結(jié)果 如下
go version
//結(jié)果:
go version go1.15.1 darwin/amd64
//我的電腦結(jié)果:
go version go1.17.5 windows/amd64
安裝過(guò)程看官網(wǎng)
go mod開(kāi)啟go env GO111MODULE
goenvGO111MODULE
//結(jié)果:
on
goctl版本1.3.0
goctl -v
goctl version 1.3.0-20220201 windows/amd64
protoc版本3.19.4(找不到官網(wǎng)小版本)
下載頁(yè)面
https://github.com/protocolbuffers/protobuf/releases
window當(dāng)前版本下載地址:
https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protoc-3.19.4-win64.zip
其他
第一種方式:goctl rpc proto命令生成rpc代碼(這種方式未來(lái)確定會(huì)廢棄)
需要安裝如下版本軟件:
1.protoc-gen-go(使用v1.3.2), 驗(yàn)證安裝結(jié)果 如下
//1.16+版本使用go install
goinstallgithub.com/golang/protobuf/protoc-gen-go@v1.3.2
goget-ugithub.com/golang/protobuf/protoc-gen-go@v1.3.2
驗(yàn)證結(jié)果:
user.proto文件內(nèi)容如下:
syntax="proto3";
packageuser;
// protoc-gen-go 版本大于1.4.0, proto文件需要加上go_package,否則無(wú)法生成
optiongo_package="./userClient";
messageIdRequest{
stringid=1;
}
messageUserResponse{
// 用戶id
stringid=1;
// 用戶名稱
stringname=2;
// 用戶性別
stringgender=3;
}
serviceUser{
rpcgetUser(IdRequest)returns(UserResponse);
}
user.proto目錄文件夾執(zhí)行如下命令:
goctl rpc proto-srcuser.proto-dir./protoDemo1
//結(jié)果
D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctl rpc proto-srcuser.proto-dir./protoDemo1
deprecated: use"goctl rpc protoc"instead,forthe 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.
所有的代碼會(huì)在./protoDemo1目錄下面生成
其他
第二種方式:goctl rpc protoc命令生成rpc代碼(未來(lái)版本會(huì)使用這種方式)
需要安裝如下版本軟件:
protoc-gen-go(使用v1.26版本), 驗(yàn)證安裝結(jié)果 如下
//1.16+版本使用go install
goinstallgoogle.golang.org/protobuf/cmd/protoc-gen-go@v1.26
goget-ugoogle.golang.org/protobuf/cmd/protoc-gen-go@v1.26
protoc-gen-go-grpc(使用v1.1版本)
【說(shuō)明】當(dāng)前官方文檔并沒(méi)有介紹這種方式安裝垒探,默認(rèn)第一種方案安裝
//1.16+版本使用go install
goinstallgoogle.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
goget-ugoogle.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
【錯(cuò)誤提醒】如果沒(méi)有安裝protoc-gen-go-grpc,你輸入
goctlrpcprotocuser.proto--go_out=./protoDemo2--go-grpc_out=./protoDemo2--zrpc_out=./protoDemo2
會(huì)出現(xiàn)如下報(bào)錯(cuò):
D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctlrpcprotocuser.proto--go_out=./protoDemo2--go-grpc_out=./protoDemo2--zrpc_out=./protoDemo2
protocuser.proto--go_out=./protoDemo2--go-grpc_out=./protoDemo2
?[31mgoctl:generationerror:'protoc-gen-go-grpc'????????????????????????е????
?????????????
--go-grpc_out:protoc-gen-go-grpc:Pluginfailedwithstatuscode1.
goctlversion:1.3.0-20220201windows/amd64
?[0m
驗(yàn)證結(jié)果:
user.proto文件內(nèi)容同第一種方式一樣:
user.proto目錄文件夾執(zhí)行如下命令:
goctl rpc protoc user.proto--go_out=./protoDemo2--go-grpc_out=./protoDemo2--zrpc_out=./protoDemo2
所有的代碼會(huì)在./protoDemo2目錄下面生成
其他
goctl rpc protoc --help命令講解:
--go_out參數(shù)和--go-grpc_out必須保持一致怕吴,這是protoc-gen-go-grpc的命令;
--zrpc_out參數(shù)就是第一種方式的src參數(shù)
D:\Tools\Go\Code\src\go-zero-demo\mall\user\rpc>goctlrpcprotoc--help
NAME:
goctlrpcprotoc-generategrpccode
USAGE:
example:goctlrpcprotocxx.proto--go_out=./pb--go-grpc=./pb--zrpc_out=.
DESCRIPTION:
fordetails,seehttps://go-zero.dev/cn/goctl-rpc.html
OPTIONS:
--zrpc_outvaluethezrpcoutputdirectory
--stylevaluethefilenamingformat,see[https://github.com/zeromicro/go-zero/tree/master/tools/goctl/config/readme.md]
--homevaluethegoctlhomepathofthetemplate
--remotevaluetheremotegitrepoofthetemplate,--homeand--remotecannotbesetatthesametime,iftheyare,--remotehashigherpriority
Thegitrepodirectorymustbeconsistentwiththehttps://github.com/zeromicro/go-zero-template directory structure