// Copyright 2010 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // protoc-gen-go is a plugin for the Google protocol buffer compiler to generate // Go code. Install it by building this program and making it accessible within // your PATH with the name: // protoc-gen-go // // The 'go' suffix becomes part of the argument for the protocol compiler, // such that it can be invoked as: // protoc --go_out=paths=source_relative:. path/to/file.proto // // This generates Go bindings for the protocol buffer defined by file.proto. // With that input, the output will be written to: // path/to/file.pb.go // // See the README and documentation for protocol buffers to learn more: // https://developers.google.com/protocol-buffers/ package main import ( "flag" "fmt" "strings" "github.com/golang/protobuf/internal/gengogrpc" gengo "google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo" "google.golang.org/protobuf/compiler/protogen" ) func main() { var ( flags flag.FlagSet plugins = flags.String("plugins", "", "list of plugins to enable (supported values: grpc)") importPrefix = flags.String("import_prefix", "", "prefix to prepend to import paths") ) importRewriteFunc := func(importPath protogen.GoImportPath) protogen.GoImportPath { switch importPath { case "context", "fmt", "math": return importPath } if *importPrefix != "" { return protogen.GoImportPath(*importPrefix) + importPath } return importPath } protogen.Options{ ParamFunc: flags.Set, ImportRewriteFunc: importRewriteFunc, }.Run(func(gen *protogen.Plugin) error { grpc := false for _, plugin := range strings.Split(*plugins, ",") { switch plugin { case "grpc": grpc = true case "": default: return fmt.Errorf("protoc-gen-go: unknown plugin %q", plugin) } } for _, f := range gen.Files { if !f.Generate { continue } g := gengo.GenerateFile(gen, f) if grpc { gengogrpc.GenerateFileContent(gen, f, g) } } gen.SupportedFeatures = gengo.SupportedFeatures return nil }) }