前言
目前就我所知道的很多微服务框架都是使用grpc进行数据通信的。同时谷歌出品的protoc工具可以解析proto文件然后生成各种代码问价,一版来说如果使用grpc的话那么使用原生的protoc+protoc-gen-go插件就可以满足大部分需求,但是对于很多框架开发者来说,protoc-gen-go生成的rpc代码是不满足需求的。所以很多框架开发者大都会开发自己的代码生成插件。比如go-mirco等
使用规则
protoc --plugin=protoc-gen-hip=protoc-gen-hip --proto_path=proto --go_out=gen proto/ack.proto ack.proto
-
说明
在使用插件进行开发时 首先使用protoc进行pb文件的读取,protoc会将pb文件解析成对应的格式。然后指定插件例如我的插件就是protoc-gen-hip。protoc会将缓冲流传入插件。就会执行插件的代码了
开发
命名插件
插件的命名都是protoc-gen- 这种格式,只有这种格式才会呗protoc解*
main开发
protogen.Options{
ParamFunc: flags.Set,
}.Run(func(gen *protogen.Plugin) error {
if *plugins != "" {
return errors.New("protoc-gen-go: plugins are not supported; use 'protoc --go-grpc_out=...' to generate gRPC\n\n" +
"See " + grpcDocURL + " for more information.")
}
for _, f := range gen.Files {
if f.Generate {
gengo.GenerateFile(gen, f)
}
}
gen.SupportedFeatures = gengo.SupportedFeatures
return nil
})
在main文件中选中下面的方法gengo.GenerateFile(gen, f)读取完文件就可以执行自己的逻辑了。
总结
我在开发自己的插件的时候直接在protobuf-go创建了自己插件目录进行开发的,如果是初次了解的玩家,也可以这么做