Pourquoi Go est votre ticket en or vers le monde du backend
\nSi vous lisez ceci, vous savez probablement déjà que Go (Golang) n'est pas simplement un langage à la mode de plus. C'est le langage dans lequel sont écrits Docker, Kubernetes, Prometheus et la moitié de l'infrastructure de l'internet moderne. Mais savez-vous ce qui distingue un développeur talentueux d'un débutant ? Ce n'est pas la connaissance de la syntaxe, mais les projets réels pour portfolio en Go.
\nLes recruteurs sont fatigués des "to-do lists" monotones en React. Ils ont besoin de personnes qui comprennent les goroutines, savent concevoir des API et n'ont pas peur de travailler avec le réseau. Dans cet article, nous ne nous contenterons pas d'énumérer des idées - nous analyserons 5 projets avec de vrais extraits de code qui couvriront 90% des questions d'entretien. C'est parti !
\n\nProjet n°1 : API RESTful pour raccourcir les liens (URL Shortener)
\nPourquoi est-ce important ?
\nC'est un classique du genre. Tout développeur backend doit savoir monter un serveur HTTP, travailler avec des middleware et du routage. Le projet "raccourcisseur de liens" s'intègre parfaitement dans les projets Golang pour portfolio, car il permet de montrer la compréhension des structures, du hachage et du travail avec les bases de données.
\n\nQu'allons-nous écrire ?
\nNous allons créer un serveur simple avec net/http (sans bibliothèques externes, pour montrer la connaissance de la bibliothèque standard). Le serveur acceptera une longue URL et retournera un code court (par exemple, /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\nQu'allez-vous améliorer ?
\n- \n
- Le travail avec
sync.RWMutexpour l'accès concurrent \n - La sérialisation JSON \n
- Une architecture propre sans frameworks \n
Ce projet pour portfolio en Go montrera que vous comprenez comment les choses fonctionnent "sous le capot".
\n\nProjet n°2 : Utilitaire CLI pour la surveillance du système
\nPourquoi dans un portfolio ?
\nGo est réputé pour ses utilitaires console. Écrire votre propre top ou htop est un excellent moyen de montrer le travail avec les appels système et les goroutines. C'est l'un des projets les plus utiles pour portfolio en Go, car il est proche des tâches DevOps réelles.
Code : Surveillance du CPU et de la mémoire
\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