Heim >Backend-Entwicklung >Golang >Wie kann man neu definierte Felder in der Protokollpufferdefinition in Go reparieren?
Ich erstelle einen gRPC-Client mithilfe der .proto-Datei des Anbieters und habe mehrere Enumerationen mit gleichnamigen Werten.
syntax = "proto3"; enum Color { NONE = 0; BLUE = 1; } enum Style { SOLID = 0; NONE = 1; }
Wenn ich also den Go-Dienst für die .proto-Datei generiere und versuche, ihn auszuführen, erhalte ich die folgende Fehlermeldung:
...\deal.pb.go:460:2: NONE redeclared in this block ...\deal.pb.go:105:2: other declaration of NONE
Ich habe versucht, Aufzählungen innerhalb von Nachrichten zu verschieben, zum Beispiel Farben innerhalb von Formen, und habe erwartet, dass dadurch ein anderer Namespace bereitgestellt wird. Aber es nützt nichts. Der generierte Code deklariert konstante Blöcke und die Nachricht bietet nicht den gewünschten Namensabstand. Dies funktioniert für C#.
const ( NONE Shape = 0 BLUE Shape = 1 )
Irgendwelche Ideen, wie man dieses Problem lösen kann?
Sie sollten die Aufzählungswerte umbenennen, da das Hauptproblem im bereitgestellten Code darin besteht, dass der generierte Go-Code zwei Konstanten mit dem Namen NONE enthält, von denen eine aus der Aufzählung Color stammt und die Stil Eine der Aufzählungen. Dies führt zu einem Namenskonflikt, da in go alle Konstanten im generierten Protobuf-Code auf Paketebene vorhanden sind, wodurch sie zu globalen Variablen des Pakets werden. Vielleicht können Sie Folgendes versuchen:
enum Color { COLOR_NONE = 0; COLOR_BLUE = 1; } enum Style { STYLE_SOLID = 0; STYLE_NONE = 1; }
Das obige ist der detaillierte Inhalt vonWie kann man neu definierte Felder in der Protokollpufferdefinition in Go reparieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!