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?

王林
王林nach vorne
2024-02-06 11:39:04694Durchsuche

如何修复 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;
}

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?


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;
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen