通过实践是我学习的最佳途径。学习go-zero也是一样。接下来看看如何用goctl来生成通用代码,构建rpc。
搭建环境
- 安装go
- 安装goctl
- 安装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