type TestPlugin … type NewTestPlugin … var testplugins … func RegisterTestPlugin(newFunc NewTestPlugin) { … } type plugin … func NewPlugin() *plugin { … } func (p *plugin) Name() string { … } func (p *plugin) Init(g *generator.Generator) { … } func (p *plugin) Generate(file *generator.FileDescriptor) { … } type testProto … func newProto(g *generator.Generator) TestPlugin { … } func (p *testProto) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { … } type testJson … func newJson(g *generator.Generator) TestPlugin { … } func (p *testJson) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { … } type testText … func newText(g *generator.Generator) TestPlugin { … } func (p *testText) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool { … } func init() { … }