Add --go-module-name flag to support generating Go module compatible code (#7651)

* Add --go-module-name flag to support generating code for go modules

* Rename echo example folder

* Grammar

* Update readme for go-echo example

* Update readme for go-echo example

* Re-enable go modules after test is done
This commit is contained in:
Michael Le
2022-11-22 14:28:01 -08:00
committed by GitHub
parent 60975d6f7e
commit e000458bb1
13 changed files with 419 additions and 2 deletions

View File

@@ -152,6 +152,8 @@ const static FlatCOption options[] = {
{ "", "go-import", "IMPORT",
"Generate the overriding import for flatbuffers in Golang (default is "
"\"github.com/google/flatbuffers/go\")." },
{ "", "go-module-name", "",
"Prefix local import paths of generated go code with the module name" },
{ "", "raw-binary", "",
"Allow binaries without file_identifier to be read. This may crash flatc "
"given a mismatched schema." },
@@ -448,6 +450,9 @@ int FlatCompiler::Compile(int argc, const char **argv) {
} else if (arg == "--go-import") {
if (++argi >= argc) Error("missing golang import" + arg, true);
opts.go_import = argv[argi];
} else if (arg == "--go-module-name") {
if (++argi >= argc) Error("missing golang module name" + arg, true);
opts.go_module_name = argv[argi];
} else if (arg == "--defaults-json") {
opts.output_default_scalars_in_json = true;
} else if (arg == "--unknown-json") {

View File

@@ -1532,7 +1532,12 @@ class GoGenerator : public BaseGenerator {
// Create the full path for the imported namespace (format: A/B/C).
std::string NamespaceImportPath(const Namespace *ns) const {
return namer_.Directories(*ns, SkipDir::OutputPathAndTrailingPathSeparator);
std::string path =
namer_.Directories(*ns, SkipDir::OutputPathAndTrailingPathSeparator);
if (!parser_.opts.go_module_name.empty()) {
path = parser_.opts.go_module_name + "/" + path;
}
return path;
}
// Ensure that a type is prefixed with its go package import name if it is