Golang, oder einfach Go, ist als Go-Gopher-Sprache bekannt geworden. Wenn Sie immer noch nicht verstehen, warum der Gopher, finden Sie in diesem Artikel eine überraschende Geschichte des Maskottchens. Fangen wir ganz von vorne an: Golang gilt als eine der produktivsten Programmiersprachen auf dem Markt. Im Gegensatz zu herkömmlichen Sprachen wie Java oder Python bietet Go eine einzigartige Balance zwischen einfach zu schreibendem Code und schneller Ausführung, wodurch die Entwicklung beschleunigt und die Debug- und Testzeit verkürzt wird. In diesem Artikel wird ein reales Beispiel für die Verwendung von Goroutinen und Kontext in einem Projekt betrachtet, das mit einem langsamen und instabilen REST-API-Mikrodienst interagiert.
Die Aufgabe
Stellen Sie sich vor, Sie sind gerade dem Team beigetreten und Ihr Teamleiter bittet Sie, einen neuen in Golang geschriebenen Microservice (z. B. den Risikomanager) an den über die REST-API bereitgestellten Benutzer-Microservice zu binden.
Das Problem
Der Risikomanager muss mit einer REST-API interagieren, die langsam und instabil sein kann, sodass wir solche Anfragen sorgfältig bearbeiten müssen. Ich werde Goroutinen für asynchrone HTTP-Anfragen und Kontext verwenden, um Anforderungszeitüberschreitungen und Fehlerbehandlung zu verwalten.
Die Lösung
Die Verwendung von Goroutinen und Kontext in Golang ermöglicht die effiziente Verwaltung gleichzeitiger Aufgaben und den Umgang mit langsamen oder instabilen externen APIs.
Der erste Schritt zur Interpretation in einem Code besteht darin, die API zu erstellen. Ich habe den Shareware-Dienst verwendet https://mockapi.io/ Es ist praktisch, einen REST zu generieren API mit einem grundlegenden Satz von Entitäten, z. B. Benutzer.
Angenommen, jemand hat sein Bestes gegeben und Ihr Unternehmen verfügt über einen internen Dienst, der Benutzer auflistet. Unsere Aufgabe besteht darin, die Benutzerliste im neuen Risikomanager wiederzuverwenden (die Benutzerdatenstruktur erfüllt den von mockapi.io beschriebenen Vertrag). Der folgende Code stellt eine Anfrage, verarbeitet den Text und erzeugt entweder eine Liste von Benutzern oder den entsprechenden Fehler.
type User struct { CreatedAt string Name string Avatar string Id string } // Original slow request func fetchUsers(ctx context.Context) (*[]User, error) { resp, err := http.Get("https://
Um den Vorgang zu steuern, verwende ich den obersten übergeordneten Kontext für alle anderen Kontexte – context.Background. Ich werde diesen Kontext mit neuen Daten ergänzen, in diesem Fall dem Timeout – context.WithTimeout, das ich als 2 Sekunden definieren werde. Weitere Informationen zum Arbeiten mit Kontexten in Go finden Sie in diesem Artikel.
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() usersChan := make(chan *[]User) errChan := make(chan error) go func() { users, err := fetchUsers(ctx) if err != nil { errChanIm Beispiel verwende ich zwei Kanäle – „usersChan“, um das von unserem internen Dienst empfangene Ergebnis aufzuzeichnen, und den zweiten Kanal „errChan“, um den Fehler aufzuzeichnen.
Wenn die Antwort einer langsamen API nicht innerhalb von 2 Sekunden eintrifft, erkennen wir einen Fehler und geben die Möglichkeit, ihn auf einer externen Ebene korrekt zu verarbeiten.In diesem praktischen Beispiel mit dem Risikomanager ermöglichten Goroutinen asynchrone HTTP-Anfragen, während der Kontext die Behandlung von Zeitüberschreitungen sicherstellte, was für den Aufbau zuverlässiger und belastbarer Mikrodienste von entscheidender Bedeutung ist.
P.S.
Dieser Artikel richtet sich an unerfahrene Entwickler, die über Grundkenntnisse verfügen, aber keine Ahnung haben, wo sie ihr Wissen anwenden können. Ich freue mich über Ihr Feedback und beantworte gerne Ihre Fragen.
Ein funktionierendes Beispiel und mehrere andere Implementierungen der grundlegendsten Dinge in der Go-Sprache finden Sie auf meinem GitHub unter dem Link
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3