gorpc-cli is an efficient tool to help developers :
gorpc create
, generate service template or rpc stubgorpc update
, update service template or rpc stubgorpc bug
, create a bug/issue at issue pagegorpc version
, show the versiongorpc rpc
, launch rpc test to your work
gorpc is built upon cobra, it is easy to extend new abilities.
Google Protobuf is developed by Google, it's a self-descriptive message format.
Using protobuf as IDL (Interface Descriptor Language) is very common, Google also
provides a protobuf compiler called protoc
.
Before, I wrote an article to introduce how protoc
and proto-gen-go
coordinate to work,
and some internals of protocol buffer. If you're interested, please read my it:
Protoc及其插件工作原理分析(精华版)
We usually execute command like protoc --cpp_out/--java_out
to generate cpp
header/source, java files.
While for many other languages, protoc
doesn't implement it, such as, go programming
language. If we want to generate *.pb.go
like *.pb.h/*.pb.cc
or *.pb.java
, we
should implement a plugin for go
, we already have a tool, that is protoc-gen-go
.
Take protoc and protoc-gen-go as an example, let's see how they coordinate to work.
Just now, we know protobuf is a self-descriptive message format, when file *.proto
parsed by protoc
, a FileDesciptorProto
object will be built, it contains nearly
everything about the *.proto
we written. If you know little about internals of protoc
or protobuf
itself, please refer to my article metioned above.
when run command protoc --go_out *.proto
, protoc will read your protofile and parse it,
after that, it build a FileDescriptorProto object, then it will serialize it and search
executable named protoc-gen-go
in your PATH
shell env variable. If found, it will
fork a childprocess to run protoc-gen-go
, and parentprocess protoc
will create a
pipe btw itself and childprocess to communicate. protoc
will send a CodeGenerateRequest
to the childprocess protoc-gen-go
via pipe. This CodeGenerateRequest
contains
serialized FileDescriptorProto
, then protoc-gen-go
read from pipe and extract it.
protoc-gen-go
will be responsible for generate source code by g.P("..")
. This generated
source code info will be responded to protoc
, protoc
process will create file and
write file content (source code).
This is the way protoc
and protoc-gen-go
works.
Usually, we can use protoc-gen-go as an starting point, we can add some files to generate besiding *.pb.go, for example, some default configuration files, or other go code.
But, writing a new protoc plugin like protoc-gen-go is really not a good idea for generating source code, especially you want to generate language for many more languages, or you want to add some flags, etc.
This manner, writing a new protoc plugin, increases the difficulty in maintenance and extensibility. If you have written some before, you'll know what I am saying.
- use
g.P(), g.In(), g.Out()
to generate or format code;
Though we could use go tempalates instead of this, like hitzhangjie/protoc-gen-gorpc
,
passing flags is another big problem, which seriously limit the funtionality, and make
it hard to use.
We could parse the *.proto file once, then using template technology to generate files. If we want to support new project template, we just change or add project template, needless to change the code. And, we could add command, subcommand, flags easily by cobra to extend the tool's functionalities.
run gorpc
or gorpc help
to show the help message, you can run gorpc help create
to see
more details relevant to gorpc create
.
gorpc is an efficient too to speedup development.
for example:
- quickly generate project or rpcstub, based on pb
- send rpc request to test the target server
- update template to the newest version
- quickly open issue page to report an issue
- more ...
Usage:
gorpc [command]
Available Commands:
create quickly create project or rpcstub, based on pb
help Help about any command
issue report an issue
update quickly update gorpc template or rpcstub, based on pb
version show gorpc version (commit hash)
Flags:
-h, --help help for gorpc
Welcome the contribution from you !
Special thanks to the Jetbrains Team for their support.