Heim > Backend-Entwicklung > Golang > Wie kann man neu definierte Felder in der Protokollpufferdefinition in Go reparieren?

Wie kann man neu definierte Felder in der Protokollpufferdefinition in Go reparieren?

王林
Freigeben: 2024-02-06 11:39:04
nach vorne
703 Leute haben es durchsucht

如何修复 Go 中协议缓冲区定义中重新定义的字段?

Frageninhalt

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;
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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
)
Nach dem Login kopieren

Irgendwelche Ideen, wie man dieses Problem lösen kann?


Richtige Antwort


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;
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage