pseudomuto/protokit

GitHub: pseudomuto/protokit

Stars: 81 | Forks: 32

# protokit [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/eb76c54c88005019.svg)][github-ci] [![codecov](https://codecov.io/gh/pseudomuto/protokit/branch/master/graph/badge.svg)][codecov-url] [![GoDoc](https://godoc.org/github.com/pseudomuto/protokit?status.svg)][godoc-url] [![Go Report Card](https://goreportcard.com/badge/github.com/pseudomuto/protokit)][goreport-url] A starter kit for building protoc-plugins. Rather than write your own, you can just use an existing one. See the [examples](examples/) directory for uh...examples. ## Getting Started package main import ( "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/pluginpb" "github.com/pseudomuto/protokit" _ "google.golang.org/genproto/googleapis/api/annotations" // Support (google.api.http) option (from google/api/annotations.proto). "log" ) func main() { // all the heavy lifting done for you! if err := protokit.RunPlugin(new(plugin)); err != nil { log.Fatal(err) } } // plugin is an implementation of protokit.Plugin type plugin struct{} func (p *plugin) Generate(in *pluginpb.CodeGeneratorRequest) (*pluginpb.CodeGeneratorResponse, error) { descriptors := protokit.ParseCodeGenRequest(req) resp := new(pluginpb.CodeGeneratorResponse) for _, d := range descriptors { // TODO: YOUR WORK HERE fileName := // generate a file name based on d.GetName() content := // generate content for the output file resp.File = append(resp.File, &pluginpb.CodeGeneratorResponse_File{ Name: proto.String(fileName), Content: proto.String(content), }) } return resp, nil } Then invoke your plugin via `protoc`. For example (assuming your app is called `thingy`): `protoc --plugin=protoc-gen-thingy=./thingy -I. --thingy_out=. rpc/*.proto`
标签:EVTX分析