Go Team kündigte die Einführung von Protocol Buffers neue Go - API (APIv2), und dass dies eine erhebliche Revision. APIv2 wichtigsten Anbieter von Reflexion (Spiegelung) Funktion, durch die der Entwickler in der Lage ist numerische Protocol Buffers Typ - System zu erfassen, sondern auch wegen der Änderung der offiziellen Nachrichtentypdefinitionen und ist daher nicht kompatibel mit der alten und neuen Version der API.
Protocol Buffers ist Google sprachunabhängige Datenaustauschformat, die Sequenz des Erweiterungsmechanismus entwickelt wird, um Daten strukturiert und XML ist ähnlich, aber kleiner und einfacher.
Der Bau der neuen API-Motivation
Go erste Protocol Buffers Paket freigegeben wurde 10 Jahre , in diesem Jahrzehnt, dieses Paket zusammen mit dem Auf- und Ausbau von Go, seine Nutzer Nachfrage hat zugenommen. Go offiziell erwähnt , dass viele Entwickler schreiben wollen mithilfe von Reflektion (Reflection) Programm der Protokollpuffer (Protokollpuffer) Nachricht überprüfen, aber reflect
nur das Paket reflektiert wird, kann die Art und den Wert der Go erkennt, ignoriert das System die Vereinbarung vom Puffertyp die Informationen. Zum Beispiel könnten wir ein Spiel durch Protokolleinträge und entfernen Sie alle Kommentare für das Feld mit sensiblen Daten Funktion schreiben, ist aber nicht Teil des Kommentarfeld Go Typ - System, so dass der Betrieb zu viel Mühe.
Darüber hinaus können Entwickler Datenstrukturen andere als die Struktur der Protokolldaten durch den Compiler erzeugt Puffer, der zum Beispiel darstellen kann, ist der Nachrichtentyp zum Compile-Zeit - Typ - Feeds nicht bekannt. Schließlich proto.Message
ist es auch eine gemeinsame Quelle des Problems.
Der Beamte sagte , dass diese drei Fragen sind eine häufige Ursache, gibt es auch eine gemeinsame Lösung: Message
Die Schnittstelle sollte vollständig das Verhalten der Meldung angeben sein, und Message
Funktion Betriebswert sollte jede Art korrekt implementieren , um die Schnittstelle zu übernehmen frei sein.
Da Message
kann man nicht die bestehende Definition der Art von Paket ändern, während API kompatibel beibehalten, so die offizielle Entscheidung , einen neuen Protocol Buffers Modul zu starten, und die neue Version nicht kompatibel mit älteren Versionen ist.
Reflection (Reflexion) ist die neue Version der Flaggschiff - Funktion, die ähnlich bietet reflect
Funktionalität und Wert der Reflexionstyp - Paket Erkennung von Go. Protocol Buffers Fähigkeit der Reflexionsfunktion entsprechend der Art von Protokoll - Puffer, die Möglichkeit bietet , den Wert des Systems zu erfassen, wobei die Verpackung einen Deskriptor Typ enthält, beschreibt das Quelldokument , das die Struktur und den Typ des Wertes in der Schnittstelle definiert, die Nachrichten Betrieb und Prüfung liefert .
Die offizielle Version der Original-Go Protocol Buffers genannt APIv1, und die neue Version namens APIv2, aufgrund der Inkompatibilität APIv1 und APIv2, so einen anderen Pfad für jede Modul Version verwenden. Die offizielle darauf hingewiesen, weil jeder Entwickler auf neue Versionen von unterschiedlichen Geschwindigkeiten zu migrieren, und einige Programme können weiterhin die alte Version verwenden, selbst innerhalb des gleichen Programms gibt es verschiedene Versionen können die API verwenden, und beabsichtigt daher, die offiziellen auf unbestimmte Zeit zu präsentieren API unterstützen v1.
github.com/golang/[email protected]
Es ist APIv2 vorherige Version des nächsten APIv1github.com/golang/[email protected]
APIv1 Version wird in Übereinstimmung mit APIv2 umgesetztgoogle.golang.org/[email protected]
Version ist APIv2