2015-04-08 8 views
8

Google hat unbekannte Felder in Proto3 entfernt. Ich würde gerne die Gründe für diese Entscheidung hören. Wenn jemand das Proto2-Verhalten replizieren kann, würde ich es gerne hören.Wie kann unbekannte Feldfunktionalität in Proto3 repliziert werden?

Wenn es darauf ankommt, schreiben wir unseren Code in Go.

Da proto3 und grpc parallel entwickelt wurden, wollte ich auch die Grpc-Community erreichen.

Quelle: Removal of unknown fields

+1

Es geht nicht darum, wem Sie "erreichen". Sie stellen eine Frage zu Protokollpuffer. GRPC ist eine andere Sache. Sicher, sie sind verwandt, aber deine Frage ist nicht * über * gRPC. – murgatroid99

+0

Sie scheinen nicht viel gesagt zu haben. Vielleicht reinigt es die Oberfläche: gRPC [füllt einfach deine Strukturen] (http://godoc.org/google.golang.org/grpc#Stream), während proto [dir eine Nachricht geben muss, die du weitergeben kannst] (http://godoc.org/github.com/golang/protobuf/proto#Unmarshal) (und Sie müssen es tatsächlich weitergeben, damit Ihre App nicht für das Feld geeignet ist). Sie hätten es vielleicht für sicherer gehalten, Caller und Callees gemeinsam zu aktualisieren, etwa wenn eine Go-Methode einen Parameter hinzufügt, dessen Aufrufer ebenfalls aktualisiert werden müssen. Als Workaround könnten Sie möglicherweise Proto3-Karten für neue Felder verwenden. – twotwotwo

+1

Vielleicht einen bestimmten Anwendungsfall angeben, für den Sie "unbekannte" Felder verwendet haben? – drozzy

Antwort

2

für Primitive von Feldpräsenz Loswerden macht Protobuf mehr "natürlich" und effizient in vielen Sprachen, da Primitiven in C/C++, Java, C#, und Go vorhanden sein muss. Wenn Sie in solchen Sprachen Anwesenheitsinformationen wünschen, "boxen" Sie das Primitiv, indem Sie es zu einem Zeiger auf ein Primitiv machen.

Protobuf 3 beseitigt Präsenz für Primitive, aber hat es immer noch für Nachrichten. So können Sie die gleiche "Boxing" -Technik für Protobuf verwenden. Protobuf hat jetzt standard messages that box primitives.

Verwandte Themen