Exercices
Créer un serveur de chat simple avec TCP
Conception de l'architecture du serveur de chat
- Identifier les composants clés du serveur de chat : client, serveur, protocole de communication.
- Définir les interactions client-serveur (connexion, déconnexion, envoi de messages).
Implémentation du serveur de chat en utilisant TCP
- Initialiser un serveur TCP en Go :
net.Listen("tcp", ":8080")
.
- Accepter les connexions entrantes avec une boucle infinie :
for { conn, err := listener.Accept() }
.
- Gérer chaque connexion dans une goroutine distincte pour permettre des communications simultanées.
Création d'un client de chat en utilisant TCP
- Utiliser
net.Dial("tcp", "localhost:8080")
pour se connecter au serveur.
- Écrire des messages au serveur via la connexion TCP :
fmt.Fprintf(conn, "Message\n")
.
- Lire les réponses du serveur :
bufio.NewReader(conn).ReadString('\n')
.
Gestion des erreurs et des déconnexions
- Gérer les erreurs de connexion et d'écriture/lecture avec
if err != nil { log.Fatal(err) }
.
- Détecter les déconnexions par des erreurs de lecture/écriture.
- Fermer les connexions après utilisation :
defer conn.Close()
.
Implémenter une API RESTful pour gérer une liste de tâches
Conception de l'API pour la gestion des tâches
- Définir les opérations CRUD : création (POST), lecture (GET), mise à jour (PUT), suppression (DELETE).
- Spécifier les routes pour chaque opération, par exemple
/tasks
pour la lecture et la création, /tasks/{id}
pour la mise à jour et la suppression.
Mise en place de l'API RESTful avec gorilla/mux
- Initialiser un routeur avec
r := mux.NewRouter()
.
- Définir les routes et les manipulatrices correspondantes :
r.HandleFunc("/tasks", createTask).Methods("POST")
.
- Démarrer le serveur avec
http.ListenAndServe(":8080", r)
.
Implémentation des opérations CRUD (Create, Read, Update, Delete)
- Définir une structure pour les tâches :
type Task struct { ID string; Description string }
.
- Stocker les tâches dans une map ou une base de données.
- Implémenter les fonctions
createTask
, readTasks
, updateTask
, deleteTask
pour interagir avec le stockage.
Gestion des erreurs et validation des données
- Utiliser
http.Error
pour renvoyer des erreurs HTTP.
- Valider les données entrantes avec les tags
json
sur les structures et if
pour vérifier les conditions.
- Gérer les erreurs de base de données et les erreurs de formatage JSON.
- Renvoyer des réponses HTTP appropriées :
w.WriteHeader(http.StatusCreated)
, json.NewEncoder(w).Encode(tasks)
.