Golang-Engineering-Komponenten: Protokoll-Compiler und API zum Lesen und Schreiben von Nachrichten des Hochleistungs-Nachrichtenübertragungsprotokolls Protobuf

Als schnelle und effiziente Programmiersprache wird Golang von Entwicklern zunehmend bevorzugt. Als leistungsstarkes Nachrichtenübertragungsprotokoll ist Protobuf ebenfalls weit verbreitet. In diesem Artikel wird erläutert, wie Sie den Protoc-Compiler und die API zum Lesen und Schreiben von Nachrichten verwenden, wenn Sie Protobuf zum Implementieren der Nachrichtenübertragung in Golang verwenden.

1. Was ist Protobuf?

Protobuf (Protocol Buffers) ist ein von Google entwickeltes leichtes und effizientes Datenaustauschformat, das eine schnelle, skalierbare und interoperable Kommunikation zwischen verschiedenen Sprachen ermöglicht. Es verwendet binäre Kodierung, die kleiner und schneller zu analysieren ist als reine Textformate wie XML und JSON.

Zweitens, Protokoll-Compiler

Wenn Sie Protobuf verwenden, müssen Sie zunächst eine .proto-Datei definieren und den Strukturcode der entsprechenden Sprache (z. B. Golang) über den Protoc-Compiler generieren. Das Folgende ist die grundlegende Verwendung des Protokoll-Compilers:

  1. Laden Sie den Protokoll-Compiler herunter und installieren Sie ihn

Zunächst müssen Sie den Protokoll-Compiler unter der entsprechenden Plattform von der offiziellen Website herunterladen und installieren.

  1. Schreiben Sie eine .proto-Datei

Erstellen Sie als Nächstes eine Datei mit dem Namen example.proto in Ihrem Projekt und fügen Sie den folgenden Inhalt hinzu:

syntax = "proto3";

package example;

message User {
    int32 id = 1;
    string name = 2;
    string email = 3;
}

Der obige Code definiert einen Nachrichtentyp namens „Benutzer“ mit drei Feldern: ID, Name und E-Mail.

  1. Kompilieren Sie die .proto-Datei

Als nächstes müssen wir den Protoc-Compiler verwenden, um die .proto-Datei in den Strukturcode der entsprechenden Sprache zu kompilieren. Geben Sie in der Befehlszeile den folgenden Befehl ein:

protoc --go_out=. example.proto

Dieser Befehl generiert eine Golang-Strukturcodedatei mit dem Namen example.pb.go.

3. API zum Lesen und Schreiben von Nachrichten

Wenn Sie Protobuf zum Übertragen von Daten verwenden, sind auch Kodierung und Dekodierung erforderlich. Wir können ein Nachrichtenobjekt mit der Funktion proto.Marshal() in ein Byte-Slice konvertieren und ein Byte-Slice mit der Funktion proto.Unmarshal() in ein Nachrichtenobjekt konvertieren.

  1. Nachricht schreiben

Hier ist ein Beispiel für das Schreiben einer Nachricht:

user := &User{
    Id:    123,
    Name:  "Alice",
    Email: "[email protected]",
}

data, err := proto.Marshal(user)
if err != nil {
   // 处理错误
}

// 将data写入网络连接中
_, err = conn.Write(data)
if err != nil {
   // 处理错误
}

Der obige Code erstellt zunächst eine Struktur vom Typ „Benutzer“ mit dem Namen „user“ und ruft die Funktion „proto.Marshal()“ auf, um sie in ein Byte-Slice zu kodieren. Das Byte-Slice wird dann in die Netzwerkverbindung geschrieben.

  1. lies die Nachricht

Hier ist ein Beispiel für das Lesen einer Nachricht:

buf := make([]byte, 1024)

n, err := conn.Read(buf)
if err != nil {
   // 处理错误
}

user := &User{}
err = proto.Unmarshal(buf[:n], user)
if err != nil {
   // 处理错误
}

Der obige Code erstellt zunächst ein Byte-Slice der Länge 1024 und liest Daten daraus über eine Netzwerkverbindung. Rufen Sie dann die Funktion proto.Unmarshal() auf, um das gelesene Byte-Slice in eine Benutzertypstruktur zu dekodieren.

Viertens. Zusammenfassung

Das Obige dreht sich alles um den Protoc-Compiler und die API zum Lesen und Schreiben von Nachrichten des Hochleistungs-Nachrichtenübertragungsprotokolls Protobuf. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Protobuf zum Übertragen von Daten verwenden, müssen Sie zunächst das Nachrichtenformat definieren und Kodierungs- und Dekodierungsvorgänge durchführen.

おすすめ

転載: blog.csdn.net/SMILY12138/article/details/130885547