protoc插件开发(-)

638 阅读1分钟

前言

目前就我所知道的很多微服务框架都是使用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创建了自己插件目录进行开发的,如果是初次了解的玩家,也可以这么做

关注我的github