Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[protoc-gen-go] Variable name clashes in generated code when using name or value as top-level enum value #1700

Open
@gustavo-bertoldi

Description

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /