Clean Code in Go: Prinzipien und Beispiele aus der Praxis

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

Clean Code in Go: Prinzipien und Beispiele aus der Praxis

\n\n

Go ist eine Sprache, die von Anfang an mit Fokus auf Einfachheit und Lesbarkeit entworfen wurde. Doch selbst in einer so prägnanten Sprache kann man verwirrenden und schwer wartbaren Code schreiben. Das Konzept des Clean Code hilft Entwicklern, Programme zu erstellen, die leicht zu lesen, zu testen und zu ändern sind. In diesem Artikel werden wir die wichtigsten Prinzipien von Clean Code in Bezug auf Go durchgehen und konkrete Beispiele betrachten.

\n\n

Warum ist sauberer Code in Go wichtig?

\n\n

Go wird häufig für die Erstellung von Microservices, APIs und hochbelasteten Systemen verwendet. In solchen Projekten arbeitet ein Team von Entwicklern am Code. Sauberer Code reduziert die kognitive Belastung, beschleunigt Code-Reviews und verringert die Anzahl der Fehler. Das Hauptziel ist es, Code so zu schreiben, dass er nicht nur für den Autor, sondern auch für jeden anderen Entwickler, der ihn zum ersten Mal sieht, verständlich ist.

\n\n

1. Namensgebung von Variablen und Funktionen

\n\n

Die richtige Namensgebung ist die Grundlage von sauberem Code. In Go ist es üblich, kurze Namen für lokale Variablen und längere für globale Entitäten zu verwenden.

\n\n

Schlechtes Beispiel

\n
package main\n\nfunc f(x int, y string) int {\n    z, _ := strconv.Atoi(y)\n    return x + z\n}\n
\n\n

Gutes Beispiel

\n
package main\n\nfunc addPriceToCount(count int, priceStr string) int {\n    price, _ := strconv.Atoi(priceStr)\n    return count + price\n}\n
\n\n

Namensregeln in Go:

\n
    \n
  • Verwenden Sie camelCase für nicht exportierte (private) Variablen.
  • \n
  • Verwenden Sie PascalCase für exportierte (öffentliche) Funktionen und Typen.
  • \n
  • Vermeiden Sie einbuchstabige Namen, außer für Indizes in Schleifen (i, j).
  • \n
  • Fügen Sie den Variablentyp nicht in den Namen ein (z. B. priceInt ist schlecht, price ist gut).
  • \n
\n\n

2. Struktur von Paketen und Dateien

\n\n

In Go sollte jedes Paket eine einzige Aufgabe erfüllen. Teilen Sie den Code nach Verantwortlichkeiten auf. Die Standard-Projektstruktur sieht so aus:

\n\n
myproject/\n├── cmd/\n│   └── server/\n│       └── main.go\n├── internal/\n│   ├── handler/\n│   ├── service/\n│   └── repository/\n├── pkg/\n│   └── utils/\n└── go.mod\n
\n\n

Prinzip: Das Paket internal schützt den Code vor externem Import. Das Paket pkg enthält wiederverwendbare Hilfsprogramme. In cmd werden die Einstiegspunkte (Dateien main.go) gespeichert.

\n\n

Schlechtes Beispiel

\n
// Paket "utils" enthält alles Mögliche\npackage utils\n\nfunc Calculate(x, y int) int { ... }\nfunc SendEmail(to string) { ... }\nfunc ParseJSON(data []byte) { ... }\n
\n\n

Gutes Beispiel

\n
// Paket "calculator" ist nur für Berechnungen zuständig\npackage calculator\n\nfunc Add(a, b int) int { return a + b }\n
\n\n

3. Fehlerbehandlung in Go

\n\n

In Go gibt es keine Ausnahmen – Fehler werden als Werte zurückgegeben. Sauberer Code erfordert eine explizite und sinnvolle Behandlung jedes Fehlers.

\n\n

Schlechtes Beispiel

\n
func readFile(path string) string {\n    data, _ := os.ReadFile(path) // Fehler ignorieren\n    return string(data)\n}\n
\n\n

Gutes Beispiel

\n
func readFile(path string) (string, error) {\n    data, err := os.ReadFile(path)\n    if err != nil {\n        return "", fmt.Errorf("read file %s: %w", path, err)\n    }\n    return string(data), nil\n}\n
\n\n

Tipps zur Fehlerbehandlung:

\n
    \n
  • Ignorieren Sie Fehler niemals mit _.
  • \n
  • Fügen Sie immer Kontext hinzu: fmt.Errorf("operation: %w", err).
  • \n
  • Verwenden Sie benutzerdefinierte Fehlertypen für verschiedene Situationen.
  • \n
  • Verwenden Sie panic nicht für normale Fehler – nur für wirklich außergewöhnliche Situationen.
  • \n
\n\n

4. Funktionen: Länge und Verantwortung

\n\n

Eine Funktion

Blogs

Buchempfehlungen