学习 go-zero - zRPC

196 阅读1分钟

通过实践是我学习的最佳途径。学习go-zero也是一样。接下来看看如何用goctl来生成通用代码,构建rpc。

搭建环境

  1. 安装go
  2. 安装goctl
  3. 安装protoc,protoc-gen-go

开发

  • 初始化项目
mkdir myRPC
cd myRPC
go mod init mRPC
  • 生成 proto 文件
goctl rpc template -o=entry

缺省模版生成的entry.proto内容如下:

syntax = "proto3";

package entry;
    
message Entry{
  int32 id = 1;
  string header = 2;
}

service HeaderService { 
    rpc Add(Header) returns (AddHeaderResponse) {}
    rpc Modify(Header) returns (ModifyHeaderResponse) {}
    rpc Retrieve(RetrieveHeaderRequest) returns (Header) {}
}

修改文件,加入需要的字段,和相应的服务

syntax = "proto3";

package header;

option go_package = "./zRPC";
    
message Header{
  int32 id = 1;
  string header = 2;
}

message AddHeaderResponse {
  int32 id = 1;
}

message ModifyHeaderResponse {
  int32 id = 1;
}

message RetrieveHeaderRequest {
  int32 id = 1;
}

service HeaderService { 
    rpc Add(Header) returns (AddHeaderResponse) {}
    rpc Modify(Header) returns (ModifyHeaderResponse) {}
    rpc Retrieve(RetrieveHeaderRequest) returns (Header) {}
}
  • 生成rpc服务相关文件 (goctl新版本有改动)
goctl rpc protoc entry.proto --go_out=./pb --go-rpc_out=./pb --zrpc_out=.

我们再加入一个header.proto, 重复生成rpc服务相关文件。在我们的zRPC目录下有如下的文件结构:

.
├── entry.go
├── entry.proto
├── entryservices
│   └── entryservices.go
├── etc
│   ├── entry.yaml
│   └── header.yaml
├── go.mod
├── header
├── header.go
├── header.proto
├── headerservice
│   └── headerservice.go
├── internal
│   ├── config
│   │   └── config.go
│   ├── logic
│   │   ├── addlogic.go
│   │   ├── insertlogic.go
│   │   ├── listlogic.go
│   │   ├── modifylogic.go
│   │   └── retrievelogic.go
│   ├── server
│   │   ├── entryservicesserver.go
│   │   └── headerserviceserver.go
│   └── svc
│       └── servicecontext.go
├── pb
   └── zRPC
        ├── entry.pb.go
        ├── entry_grpc.pb.go
        ├── header.pb.go
        └── header_grpc.pb.go