What version of protobuf and what language are you using?
- libprotoc 32.1
- protoc-gen-go v1.36.9
What did you do?
protoc --go_out=./gen --go_opt=paths=source_relative test.proto
With the following file
syntax = "proto3";
package test;
option go_package = "proto/test";
enum MyEnum {
unknown = 0;
name = 1;
value = 2;
}
What did you expect to see?
No name clashes in the internal variables of the generated file
What did you see instead?
Variable name clashes:
MyEnum_name redeclared in this block
MyEnum_value redeclared in this block
It seems, for top-level enums, the enum value maps generated for go are named <enum_name>_name
and <enum_name>_value
. The enum consts have identical names, causing the clash.
Generated code extract:
type MyEnum int32
const (
MyEnum_unknown MyEnum = 0
MyEnum_name MyEnum = 1
MyEnum_value MyEnum = 2
)
// Enum value maps for MyEnum.
var (
MyEnum_name = map[int32]string{
0: "unknown",
1: "name",
2: "value",
}
MyEnum_value = map[string]int32{
"unknown": 0,
"name": 1,
"value": 2,
}
)
A workaround is to wrap the enum inside another message.