Vom Anfänger zum Junior: 5 Go-Projekte, die Ihr Portfolio sprengen

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

Warum Go Ihr goldenes Ticket in die Backend-Welt ist

\n

Wenn Sie dies lesen, wissen Sie wahrscheinlich bereits, dass Go (Golang) nicht nur eine weitere modische Sprache ist. Es ist die Sprache, in der Docker, Kubernetes, Prometheus und die Hälfte der Infrastruktur des modernen Internets geschrieben sind. Aber wissen Sie, was einen großartigen Entwickler von einem Anfänger unterscheidet? Nicht die Kenntnis der Syntax, sondern reale Projekte für ein Go-Portfolio.

\n

Arbeitgeber haben die immer gleichen "To-do-Listen" in React satt. Sie brauchen Leute, die Goroutinen verstehen, APIs entwerfen können und keine Angst vor Netzwerkarbeit haben. In diesem Artikel listen wir nicht nur Ideen auf – wir analysieren 5 Projekte mit echten Codefragmenten, die 90% der Fragen im Vorstellungsgespräch abdecken. Los geht's!

\n\n

Projekt Nr. 1: RESTful API zum Kürzen von Links (URL Shortener)

\n

Warum ist das wichtig?

\n

Das ist ein Klassiker. Jeder Backend-Entwickler sollte in der Lage sein, einen HTTP-Server aufzusetzen, mit Middleware und Routing zu arbeiten. Das Projekt "Link-Kürzer" passt perfekt zu Golang-Projekten für das Portfolio, da es das Verständnis von Strukturen, Hashing und der Arbeit mit Datenbanken zeigt.

\n\n

Was werden wir schreiben?

\n

Wir erstellen einen einfachen Server mit net/http (ohne externe Bibliotheken, um die Kenntnis der Standardbibliothek zu zeigen). Der Server nimmt eine lange URL entgegen und gibt einen kurzen Code zurück (z.B. /abc123).

\n\n
package main\n\nimport (\n    "crypto/rand"\n    "encoding/hex"\n    "encoding/json"\n    "fmt"\n    "net/http"\n    "sync"\n)\n\ntype URLStore struct {\n    mu   sync.RWMutex\n    data map[string]string\n}\n\nvar store = URLStore{data: make(map[string]string)}\n\nfunc generateShortID() string {\n    bytes := make([]byte, 4)\n    rand.Read(bytes)\n    return hex.EncodeToString(bytes)\n}\n\nfunc shortenHandler(w http.ResponseWriter, r *http.Request) {\n    if r.Method != http.MethodPost {\n        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)\n        return\n    }\n\n    var req struct {\n        URL string `json:"url"`\n    }\n    if err := json.NewDecoder(r.Body).Decode(&req); err != nil {\n        http.Error(w, "Bad request", http.StatusBadRequest)\n        return\n    }\n\n    shortID := generateShortID()\n    store.mu.Lock()\n    store.data[shortID] = req.URL\n    store.mu.Unlock()\n\n    w.Header().Set("Content-Type", "application/json")\n    json.NewEncoder(w).Encode(map[string]string{\n        "short_url": fmt.Sprintf("http://localhost:8080/%s", shortID),\n    })\n}\n\nfunc redirectHandler(w http.ResponseWriter, r *http.Request) {\n    shortID := r.URL.Path[1:]\n    store.mu.RLock()\n    originalURL, ok := store.data[shortID]\n    store.mu.RUnlock()\n\n    if !ok {\n        http.NotFound(w, r)\n        return\n    }\n    http.Redirect(w, r, originalURL, http.StatusFound)\n}\n\nfunc main() {\n    http.HandleFunc("/shorten", shortenHandler)\n    http.HandleFunc("/", redirectHandler)\n    fmt.Println("Server started at :8080")\n    http.ListenAndServe(":8080", nil)\n}
\n\n

Was werden Sie verbessern?

\n
    \n
  • Arbeit mit sync.RWMutex für konkurrierenden Zugriff
  • \n
  • JSON-Serialisierung
  • \n
  • Saubere Architektur ohne Frameworks
  • \n
\n

Dieses Go-Portfolio-Projekt zeigt, dass Sie verstehen, wie die Dinge "unter der Haube" funktionieren.

\n\n

Projekt Nr. 2: CLI-Dienstprogramm zur Systemüberwachung

\n

Warum ins Portfolio?

\n

Go ist bekannt für seine Konsolen-Dienstprogramme. Ein eigenes top oder htop zu schreiben, ist eine hervorragende Möglichkeit, die Arbeit mit Systemaufrufen und Goroutinen zu zeigen. Dies ist eines der nützlichsten Projekte für ein Go-Portfolio, da es realen DevOps-Aufgaben nahekommt.

\n\n

Code: CPU- und Speicherüberwachung

\n
package main\n\nimport (\n    "fmt"\n    "os"\n    "os/exec"\n    "strconv"\n    "strings"\n    "time"\n)\n\nfunc getCPUPercent() (float64, error) {\n    out, err := exec.Command("sh", "-c", "t                

Blogs

Buchempfehlungen