Warum Go Ihr goldenes Ticket in die Backend-Welt ist
\nWenn 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.
\nArbeitgeber 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\nProjekt Nr. 1: RESTful API zum Kürzen von Links (URL Shortener)
\nWarum ist das wichtig?
\nDas 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\nWas werden wir schreiben?
\nWir 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).
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\nWas werden Sie verbessern?
\n- \n
- Arbeit mit
sync.RWMutexfür konkurrierenden Zugriff \n - JSON-Serialisierung \n
- Saubere Architektur ohne Frameworks \n
Dieses Go-Portfolio-Projekt zeigt, dass Sie verstehen, wie die Dinge "unter der Haube" funktionieren.
\n\nProjekt Nr. 2: CLI-Dienstprogramm zur Systemüberwachung
\nWarum ins Portfolio?
\nGo 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.
Code: CPU- und Speicherüberwachung
\npackage 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