Heim >Backend-Entwicklung >Golang >Gehen Sie Transformers
go-utils ist eine Bibliothek, die darauf abzielt, nützliche Bibliotheken in Go bereitzustellen, um den Entwickleraufwand beim Erstellen von Dingen zu reduzieren und zu erhöhen
Produktivität.
Einige Funktionen werden unten erwähnt.
Das Grundproblem, das hier gelöst werden soll, besteht darin, wie Sie mehrere Aufgaben basierend auf einer Anfrage ausführen möchten, die Sie erhalten haben.
Stellen Sie sich das folgende Szenario vor.
Wie Sie sehen, können alle diese Prozesse zu einem Fehler führen. Von Natur aus ist Golang bei der Fehlerbehandlung sehr ausführlich. Manchmal möchten wir diesen überflüssigen Code nicht sehen.
Auch dies verringert die Lesbarkeit.
Betrachten Sie nun ein anderes Szenario –
Sobald Sie den Fehler für ProzessA behandelt und ProzessB vergessen haben, wird Golang keinen Kompilierzeitfehler mehr auslösen, der dazu führt, dass Sie diesen Fall übersehen. Ein kleiner Fehler kann Chaos anrichten. Obwohl wir vor dem Versand an die Produktion viele Prozesse befolgen müssen, fragen Sie sich: Befolgen Sie diese immer oder nicht?
Um dieses Problem zu lösen, habe ich einen Ansatz entwickelt, bei dem Sie
dabei sein werden
Ich konzentriere mich mehr darauf, zu schreiben, worauf es ankommt und wie einfach es wäre, einen Fn anzuschauen und zu verstehen, was er tut. Dies hilft auch bei der Überwindung von Variablenschatten. In Fällen, in denen mehrere Fehler zugeordnet werden, kann es zu einer Fehlerschattenbildung kommen, die schädlich sein kann. Das Befolgen dieses Musters und die richtige Codierung können dabei helfen, solche seltsamen Szenarien zu vermeiden.
Beispiele -
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() err := processFoo(ctx, &req) if err != nil { return err } err = processBar(ctx, &req) if err != nil { return err } return nil }
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Then(processFoo). Then(processBar). Result() return err }
Wie Sie sehen können, ist der Code besser lesbar und ausführbar. Dieser Denkprozess und dieses Framework können die Lesbarkeit des Codes verbessern.
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Parallel(processFooParallel). Parallel(processBarParallel). Result() return err }
Wir alle kennen die berühmten Lambdas- und Pfeilfunktionen. Golang
unterstützt die Pfeilsyntax grundsätzlich nicht. Es wäre schön, es zu haben
das in Golang. Nehmen wir zunächst an, wir müssen eine Kartenoperation ausführen, die
Hier wird es schwierig. Dann erwartet Sie eine coole Umsetzung
von mir, das für Sie zu lösen. Nach dieser unten aufgeführten Implementierung würde ich
Bitten Sie Sie, sich selbst eine Lösung zu überlegen, wie dies umgesetzt worden wäre.
func TestMapRunner(t *testing.T) { // Create a map with some values floatingStrings := []string{"0.1", "0.2", "22", "22.1"} res, err := NewTransformer[string, float64](floatingStrings). Map(MapIt[string, float64](func(item string) (float64, error) { return strconv.ParseFloat(item, 64) })). Map(MapIt[float64, float64](func(item float64) (float64, error) { return item * 10, nil })). Result() if err != nil { t.Errorf("Testcase failed with error : %v", err) return } // Output: [0.1 0.2 22 22.1] t.Logf("Result: %v", res) assert.ElementsMatch(t, []any{float64(1), float64(2), float64(220), float64(221)}, res) }
Das obige Beispiel gilt für eine Konvertierung eines Strings in float64.
Dadurch werden die Fehler für Sie behoben, falls vorhanden. Die einzige Ausnahme besteht darin, dass es gegebenenfalls zu Laufzeitfehlern kommen kann
Probleme mit der Typbesetzung Seien Sie also vorsichtig. Versuchen Sie, die Testfälle zu schreiben
wodurch dieses Problem vermieden werden sollte.
Eine Erweiterung der Funktionalität wurde jetzt vorgenommen, die Filterung funktioniert auch.
Viel Spaß, Leute!!
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() err := processFoo(ctx, &req) if err != nil { return err } err = processBar(ctx, &req) if err != nil { return err } return nil }
get -u github.com/mahadev-k/go-utils@v1.0.1
Fügen Sie dies zu Ihrem go.mod hinzu.
Verwenden Sie es wie im Beispielmodul.
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Then(processFoo). Then(processBar). Result() return err }
func FooBar() error { req := struct{ isFoo bool isBar bool }{} ctx := context.TODO() runner := NewSimpleTaskRunner(ctx, req) _, err := runner. Parallel(processFooParallel). Parallel(processBarParallel). Result() return err }
Schauen Sie sich das Repo an:
Github: https://github.com/mahadev-k/go-utils
Wenn man bedenkt, dass Sie dies gelesen haben und es Ihnen gefallen hat. Wenn Sie mit mir in Kontakt treten möchten
Folge mir auf X – https://x.com/mahadev_k_
Linkedin – https://in.linkedin.com/in/mahadev-k-934520223
Schlagen Sie bei Interesse weitere Ideen für Beiträge zu diesem Repo vor.
Danke ??
Das obige ist der detaillierte Inhalt vonGehen Sie Transformers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!