lo für Go: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Bibliothek lo für Go: Generische Hilfsfunktionen (Lodash für Go)

In der Go-Entwicklung entsteht oft der Bedarf nach praktischen Funktionen für die Arbeit mit Collections, wie sie aus anderen Sprachen bekannt sind (z.B. map, filter, reduce aus JavaScript oder Python). Die Go-Standardbibliothek bietet nur ein minimales Set an Werkzeugen, und das Schreiben von sich wiederholenden for-Schleifen für jede Operation wird schnell mühsam. Hier kommt die Bibliothek lo ins Spiel – ein leistungsstarkes Set generischer Hilfsfunktionen, inspiriert von der beliebten JavaScript-Bibliothek Lodash.

Die Bibliothek lo nutzt Generics (generische Typen), die seit Go 1.18+ verfügbar sind, um typsichere Funktionen für die Arbeit mit Slices, Maps, Channels und anderen Datenstrukturen bereitzustellen. Anstatt für jede Transformation for i := range slice { ... } zu schreiben, können Sie eine einzige Codezeile verwenden: lo.Map(slice, transformFunc). Das macht den Code lesbarer, prägnanter und weniger fehleranfällig.

Warum lo verwenden? Erstens sparen Sie Zeit: Sie müssen keinen Boilerplate-Code mehr schreiben. Zweitens erhöhen Sie die Zuverlässigkeit: Die Funktionen der Bibliothek sind gründlich getestet und decken viele Randfälle ab. Drittens sorgt es für Einheitlichkeit: Das gesamte Team verwendet dieselben Funktionen mit verständlichen Namen, was Code-Reviews vereinfacht. lo ist ein Must-have für jedes Go-Projekt, das intensiv mit Daten-Collections arbeitet.

Installation

Die Installation der Bibliothek lo erfolgt auf dem für Go üblichen Weg über go get. Stellen Sie sicher, dass Sie Go Version 1.18 oder höher installiert haben (da die Bibliothek Generics verwendet).

go get github.com/samber/lo@latest

Nach Ausführung dieses Befehls wird die Bibliothek zu Ihrer go.mod-Datei hinzugefügt. Sie können sie nun in Ihren Code importieren:

import "github.com/samber/lo"

Schnellstart

Lassen Sie uns ein einfaches Programm schreiben, das lo zum Filtern und Transformieren eines Integer-Slices verwendet.

package main

import (
    "fmt"
    "github.com/samber/lo"
)

func main() {
    // Ursprünglicher Integer-Slice
    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    // Nur gerade Zahlen filtern
    evenNumbers := lo.Filter(numbers, func(x int, _ int) bool {
        return x%2 == 0
    })
    fmt.Println("Gerade Zahlen:", evenNumbers) // [2 4 6 8 10]

    // Jede Zahl verdoppeln
    doubled := lo.Map(evenNumbers, func(x int, _ int) int {
        return x * 2
    })
    fmt.Println("Verdoppelte gerade Zahlen:", doubled) // [4 8 12 16 20]

    // Alle Zahlen summieren
    sum := lo.Sum(doubled)
    fmt.Println("Summe:", sum) // 60
}

Wie Sie sehen, ist der Code viel deklarativer und lesbarer geworden. Wir haben das Schreiben von drei separaten for-Schleifen vermieden.

Wichtige Methoden und Funktionen

Nachfolgend finden Sie eine Liste der wichtigsten Funktionen der lo-Bibliothek mit Anwendungsbeispielen. Die meisten Funktionen akzeptieren einen Slice und eine Callback-Funktion.

1. lo.Filter

Signatur: func Filter[T any](collection []T, predicate func(item T, index int) bool) []T

Funktion: Erstellt einen neuen Slice, der nur die Elemente des ursprünglichen Slices enthält, für die die Prädikatfunktion true zurückgibt.

package main

import (
    "fmt"
    "github.com/samber/lo"
)

func main() {
    names := []string{"Alice", "Bob", "Charlie", "David", "Eve"}
    // Nur Namen länger als 3 Zeichen behalten
    longNames := lo.Filter(names, func(name string, _ int) bool {
        return len(name) > 3
    })
    fmt.Println(longNames) // [Alice Charlie David]
}

2. lo.Map

S

Empfehlungen