一、官網相關描述文獻地址:
protoc & protoc-gen-go安裝 go-zero.dev/cn/protoc-install.html
rpc命令 go-zero.dev/cn/goctl-rpc.html
【說明】:有需要檢視相關內容請搜尋 推薦使用 和goctl rpc protoc greet.proto –go_out=. –go-grpc_out=. –zrpc_out=.
微服務 go-zero.dev/cn/micro-service.html
【說明】:有需要檢視相關內容請搜尋 舊版本的
protoc-gen-go
不支援--go-grpc_out
官方倉庫針對protoc說明 github.com/zeromicro/go-zero/issue...
其他
二、相同版本環境:
需要安裝如下版本軟體:
go環境版本(推薦1.16+), 驗證安裝結果 如下
```go go version //結果: go version go1.15.1 darwin/amd64 //我的電腦結果: go version go1.17.5 windows/amd64 ```
安裝過程看官網
go mod開啟go env GO111MODULE
```go go env GO111MODULE //結果: on ```
goctl版本1.3.0
```go goctl -v goctl version 1.3.0-20220201 windows/amd64 ```
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 ```
其他
第一種方式: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
驗證結果:
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); } ```
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. ```
所有的程式碼會在./protoDemo1目錄下面生成
其他
第二種方式:goctl rpc protoc命令生成rpc程式碼(未來版本會使用這種方式)
需要安裝如下版本軟體:
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 ```
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 ```
驗證結果:
user.proto檔案內容同第一種方式一樣:
user.proto目錄資料夾執行如下命令:
```go goctl rpc protoc user.proto --go_out=./protoDemo2 --go-grpc_out=./protoDemo2 --zrpc_out=./protoDemo2 ```
所有的程式碼會在./protoDemo2目錄下面生成
其他
goctl rpc protoc –help命令講解:
–go_out引數和–go-grpc_out必須保持一致,這是protoc-gen-go-grpc的命令;
–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 協議》,轉載必須註明作者和本文連結