Fiche de révision : Initiation au développement Go

Plan du Cours

  1. Objectifs et savoirs du développement
  2. Compilation et chaîne de production C
  3. Fondamentaux du langage C
  4. Contrôle et entrées-sorties en C
  5. Premiers éléments du langage Go
  6. Programmes Go et variables
  7. Tableaux et indexation
  8. Boucles et répétitions
  9. Conditionnelles et choix
  10. Fonctions et types structurés
  11. Pointeurs et méthodes
  12. Méthodes associées aux types
  13. Arrays et slices en Go
  14. Manipulation avancée des slices
  15. Arguments de ligne de commande
  16. Écriture et lecture de fichiers
  17. Interfaces et fonctions génériques
  18. Interfaces et types compatibles

1. Objectifs et savoirs du développement

Notions clés & Définitions

  • Développement informatique : Consiste à concevoir, coder, tester et intégrer une solution informatique pour un client.

★ À maîtriser

📌 Une application informatique doit être optimisée selon des critères spécifiques tels que le temps d’exécution, la précision et la consommation de ressources.

Compléments

  • Les savoirs de référence étudiés comprennent: les algorithmes fondamentaux, les algorithmes sur les structures de données, les listes, les tableaux, les collections dynamiques et statiques, les piles, les files et les structures, les types abstraits de données simples et une première approche de l’encapsulation, la modularité et les premières notions de qualité, la lecture et l’écriture de fichiers

Astuce mémo

Concevoir → coder → tester → intégrer

2. Compilation et chaîne de production C

Notions clés & Définitions

  • Compilation : Consiste à transformer un code source lisible par un humain en un fichier binaire exécutable par une machine.

★ À maîtriser

  • 🔄 La production d’un exécutable C suit les étapes suivantes:
    1. prétraitement
    2. compilation en assembleur
    3. assemblage en fichier objet
    4. édition de liens en fichier exécutable

Compléments

  • Les suffixes des fichiers sont: .c pour les fichiers source, .i pour les fichiers prétraités, .s pour les fichiers assembleur, .o pour les fichiers objet, .a pour les fichiers objets de bibliothèques précompilées

  • Avec GCC, la commande gcc -Wall -std=c23 hello.c -o hello réalise en une seule commande la compilation et la production de l’exécutable hello avec les avertissements activés et la norme C23.

Astuce mémo

Préprocesseur → compilation → assemblage → édition de liens

3. Fondamentaux du langage C

Notions clés & Définitions

  • Syntaxe : Définit la forme du langage C, notamment les accolades qui délimitent les blocs d’instructions et le point-virgule qui termine une instruction.

★ À maîtriser

📌 Un identificateur C peut contenir des lettres, des chiffres et des caractères de soulignement, mais ne peut pas commencer par un chiffre ni être un mot-clé du langage.

  • Les principaux types du C sont:
    • char
    • int
    • float
    • double
    • long double
    • enum
    • struct
    • union

📌 Une chaîne de caractères C est un tableau de caractères terminé en mémoire par le caractère \0.

📌 Les opérateurs logiques &&, || et ! manipulent des conditions booléennes, tandis que les opérateurs bit à bit &, |, ^, ~, << et >> manipulent les représentations binaires.

Compléments

  • Les commentaires C s’écrivent entre /* et */ pour les commentaires de bloc, ou commencent par // pour les commentaires de ligne.

Astuce mémo

Syntaxe = forme du code ; sémantique = sens du code

4. Contrôle et entrées-sorties en C

★ À maîtriser

📌 En C, la valeur 0 est fausse et toute valeur différente de 0 est vraie dans une condition.

  • L’instruction if exécute une première instruction si l’expression est vraie et, avec else, une seconde instruction si l’expression est fausse.

  • L’instruction switch exécute la liste d’instructions associée à la constante correspondant à l’expression, ou la branche default si aucune constante ne correspond.

  • La boucle while peut n’exécuter aucune fois son instruction si la condition est fausse au départ, tandis que la boucle do while l’exécute au moins une fois car sa condition est testée à la fin.

  • Dans main(int argc, char *argv[]), argc donne le nombre d’éléments de la ligne de commande et argv contient ces éléments sous forme d’un tableau de chaînes, argv[0] étant le nom de la commande.

Compléments

  • La boucle for for (expr1; expr2; expr3) est équivalente à l’exécution de expr1 puis à une boucle while évaluant expr2 et exécutant expr3 après chaque itération.

Astuce mémo

while peut ne jamais entrer ; do while exécute au moins une fois

5. Premiers éléments du langage Go

Notions clés & Définitions

  • Bibliothèque fmt : Fournit notamment la fonction Println utilisée pour afficher des informations dans le terminal.

★ À maîtriser

  • Un programme Go minimal contient package main, importe la bibliothèque fmt, déclare func main() et appelle fmt.Println("Hello World !") pour afficher le texte dans le terminal.

📌 Tous les fichiers de code Go présentés dans le support doivent commencer par la ligne package main.

Compléments

  • La commande go run hello.go compile puis exécute le fichier Go et affiche son résultat dans le terminal.

Astuce mémo

Un programme Go démarre dans package main et s’exécute depuis func main

6. Programmes Go et variables

Notions clés & Définitions

  • Variable : Emplacement permettant d’enregistrer une valeur pour la réutiliser ou la modifier plus tard.
  • Bibliothèque standard : Regroupe les bibliothèques fournies de base avec Go, dont fmt, qui permet notamment d’afficher des informations dans le terminal.
  • Constante : Se déclare avec const, doit recevoir une valeur lors de sa déclaration et ne peut plus être modifiée ensuite.

Points essentiels

  • 🔄 L’exécution de hello.go suit ces étapes:
    1. Placer hello.go dans un répertoire
    2. Ouvrir un terminal dans ce répertoire
    3. Utiliser la commande go run hello.go

📌 Un programme Go standard commence par package main, importe éventuellement une bibliothèque comme fmt, et le code exécuté au lancement se trouve dans la fonction main.

📌 En Go, une variable se déclare avec var suivi de son nom et de son type, qui est fixé définitivement après la déclaration.

  • Les types int, bool et string représentent respectivement un entier, un booléen et une chaîne de caractères.

  • Les valeurs par défaut sont 0 pour int, false pour bool et la chaîne vide "" pour string.

📌 En Go, toute variable déclarée doit être utilisée ensuite, et une bibliothèque importée doit également être utilisée dans le programme.

📌 L’affectation utilise le signe = : var n int = 1 initialise une variable lors de sa déclaration, tandis que n = 2 modifie une variable déjà déclarée.

  • Les entiers utilisent l’addition, la soustraction, la multiplication, la division et le modulo, les booléens utilisent ||, && et !, et les chaînes utilisent + pour la concaténation.

📌 Les comparaisons >, >=, <, <=, == et != s’appliquent aux entiers et produisent un résultat booléen.

Astuce mémo

Déclarer → affecter → calculer

7. Tableaux et indexation

Notions clés & Définitions

  • Tableau : Variable contenant n valeurs du même type, indexées par des entiers de 0 à n−1.

★ À maîtriser

📌 Un tableau d’entiers se déclare avec le type []int et peut être initialisé avec une notation comme []int{1, 2, 3}.

📌 On accède à une case d’un tableau avec son index entre crochets, et la première case porte toujours l’index 0.

  • Pour un tableau t, son dernier index est len(t)−1len(t)-1 lorsque le tableau n’est pas vide.

Compléments

📌 L’affectation t[i] = valeur modifie uniquement la case d’index i du tableau t.

Astuce mémo

Un tableau de cases numérotées à partir de 0

8. Boucles et répétitions

Notions clés & Définitions

  • Boucle for : Structure de répétition qui exécute un bloc de code plusieurs fois selon une condition.

★ À maîtriser

  • Dans la forme complète for initialisation ; condition ; mise à jour {code}, Go initialise la variable, vérifie la condition, exécute le code puis applique la mise à jour à chaque itération.

📌 Une variable déclarée dans l’initialisation d’une boucle for n’est plus accessible après la fin de cette boucle.

Compléments

  • La boucle for i := 0; i < 10; i = i + 2 affiche successivement 0, 2, 4, 6 et 8.

📌 Le raccourci i++ augmente la valeur de i de 1.

  • Une boucle for sans initialisation ni mise à jour peut utiliser seulement une condition, comme dans for reste >= diviseur, et répéter les soustractions jusqu’à ce que la condition devienne fausse.

  • Le type float64 représente les nombres décimaux et une valeur comme 12.5 s’écrit avec un point comme séparateur décimal.

Astuce mémo

Initialiser → tester → exécuter → mettre à jour

9. Conditionnelles et choix

Notions clés & Définitions

  • Conditionnelle if : Exécute une branche si une condition est vraie et, avec else, une autre branche si cette condition est fausse.

★ À maîtriser

📌 Dans if condition {code1} else {code2}, code1 est exécuté lorsque la condition est vraie et code2 lorsqu’elle est fausse.

  • Un switch teste ses case dans l’ordre et exécute uniquement le code correspondant au premier case dont la condition est vérifiée, ou default si aucun case ne convient.

📌 Le mot clé break termine immédiatement la boucle dans laquelle il est rencontré, tandis que continue termine seulement l’itération courante et passe à la suivante.

Compléments

📌 La partie else est facultative : si elle est absente, le code du if est exécuté seulement lorsque la condition est vraie.

Astuce mémo

if vérifie une condition, else traite le contraire

10. Fonctions et types structurés

Notions clés & Définitions

  • Fonction : Bloc de code nommé qui reçoit éventuellement des arguments et retourne éventuellement une ou plusieurs valeurs.
  • Type structuré : Regroupe plusieurs champs, qui peuvent avoir des types différents.

★ À maîtriser

📌 Une fonction Go se déclare avec func, son nom, ses arguments typés, le type de retour éventuel et un bloc entre accolades.

Compléments

  • La fonction f(x int) bool { return x < 10 } reçoit un entier et retourne true lorsque cet entier est strictement inférieur à 10.

  • Une fonction peut recevoir plusieurs arguments séparés par des virgules, et leurs valeurs sont fournies dans le même ordre lors de l’appel.

  • Une fonction peut retourner plusieurs valeurs en indiquant leurs types entre parenthèses et en les récupérant dans des variables séparées par des virgules.

  • Les champs d’une structure peuvent être initialisés par leur nom, modifiés indépendamment avec la notation pointée et prennent leur valeur par défaut s’ils ne sont pas initialisés.

  • Un type structuré ou un champ dont le nom commence par une majuscule est accessible depuis d’autres paquets, tandis qu’un nom commençant par une minuscule reste local au paquet.

Astuce mémo

Une fonction transforme des arguments en résultats, une structure regroupe des champs

11. Pointeurs et méthodes

Notions clés & Définitions

  • Pointeur : Variable qui stocke l’adresse mémoire d’une valeur au lieu de stocker directement cette valeur.
  • Méthode : Fonction associée à un type, dont le type concerné est indiqué avant le nom de la fonction.

★ À maîtriser

  • En Go, les arguments sont passés par valeur : la fonction reçoit une copie de la valeur et ne modifie pas directement la variable utilisée lors de l’appel.

  • Pour obtenir l’adresse d’une variable n, on écrit &n, et pour déréférencer un pointeur a afin d’accéder à la valeur située à son adresse, on écrit *a.

  • Une fonction peut modifier la variable reçue indirectement en prenant un pointeur en argument et en modifiant la valeur déréférencée, par exemple avec *a = 5.

Compléments

📌 Les types de pointeurs s’écrivent avec une étoile devant le type, ainsi *int est un pointeur vers un entier et **int est un pointeur vers un pointeur vers un entier.

Astuce mémo

Une variable contient une valeur, un pointeur contient son adresse

12. Méthodes associées aux types

Notions clés & Définitions

  • Méthode : Fonction particulière fortement associée à un type, ce qui permet de regrouper des fonctionnalités avec ce type.

★ À maîtriser

📌 Une méthode peut modifier la variable à laquelle elle s’applique seulement si son récepteur est un pointeur, car le passage des arguments se fait par valeur.

Compléments

  • Dans le type cuple, la méthode add sans paramètre supplémentaire retourne la somme des champs first et second de la variable sur laquelle elle est appelée.

📌 En Go, on ne peut définir une méthode que sur un type défini dans le même paquet, mais on peut créer un nouveau type correspondant aux entiers et lui associer une méthode.

Astuce mémo

Méthode avec valeur pour lire, méthode avec pointeur pour modifier

13. Arrays et slices en Go

Notions clés & Définitions

  • Slice : Constitué d’un entier indiquant sa taille, d’un entier indiquant sa capacité et d’un pointeur vers un array.

Points essentiels

📌 Un array est un tableau de taille fixe dont la longueur fait partie du type, tandis qu’un slice est un tableau de taille variable représenté par une taille, une capacité et un pointeur vers un array.

📌 Les arrays sont des valeurs normales passées par valeur aux fonctions, donc la modification de la copie reçue ne modifie pas l’array d’origine.

  • 🔄 Le découpage d’un slice suit ces conventions:
    1. L’indice de début est inclus
    2. L’indice de fin est exclu
    3. L’absence d’indice de début utilise le début du slice
    4. L’absence d’indice de fin utilise la fin du slice

📌 Un slice obtenu par découpage partage le même array sous-jacent que le slice de départ, de sorte que modifier l’un peut modifier l’autre.

Astuce mémo

Array copie ses cases, slice partage un array sous-jacent

14. Manipulation avancée des slices

Notions clés & Définitions

  • Capacité : Nombre d’éléments potentiels que son espace sous-jacent peut stocker, tandis que sa taille est le nombre d’éléments présents.

★ À maîtriser

📌 La fonction make crée un slice en recevant son type et sa taille, par exemple make([]int, 5), et les éléments sont initialisés à leur valeur par défaut.

  • Avec append, l’élément est ajouté dans l’array sous-jacent si la capacité est suffisante, sinon le slice est copié dans un espace plus grand avant l’ajout.

📌 La fonction copy reçoit d’abord le slice destination puis le slice source et produit une copie indépendante, de sorte qu’une modification de la destination n’affecte pas la source.

Compléments

📌 La capacité d’un slice peut être fixée comme troisième argument de make et consultée avec la fonction cap.

  • Un tableau de tableaux de type [][]int contient des slices d’entiers accessibles avec tab[i], puis avec tab[i][j] pour atteindre un entier.

Astuce mémo

Capacité suffisante → partage ; capacité insuffisante → copie

15. Arguments de ligne de commande

Notions clés & Définitions

  • os.Args : Le tableau os.Args contient le nom du programme exécuté en première position, suivi des arguments fournis sur la ligne de commande.

★ À maîtriser

📌 La commande go run compile implicitement un fichier Go puis exécute le programme, tandis que go build produit un fichier exécutable pouvant être lancé séparément.

📌 Les arguments récupérés par un programme Go sont des chaînes de caractères, même lorsqu’ils représentent des nombres.

  • La fonction strconv.Atoi convertit une chaîne en entier et retourne simultanément l’entier obtenu et une erreur indiquant si la conversion a réussi.

Compléments

📌 La bibliothèque flag permet d’associer un argument typé à une variable, de lui donner une valeur par défaut et de traiter les arguments avec flag.Parse.

Astuce mémo

Compiler, exécuter, lire, convertir

16. Écriture et lecture de fichiers

★ À maîtriser

  • La création d’un fichier avec os.Create retourne le fichier et une erreur, puis le fichier doit être fermé avec sa méthode Close après utilisation.

📌 La fonction fmt.Fprintln écrit une ligne dans le fichier fourni en premier argument et retourne le nombre d’octets écrits ainsi qu’une erreur.

📌 La fonction ioutil.ReadFile lit l’intégralité d’un fichier identifié par son chemin et retourne son contenu sous forme de []byte ainsi qu’une erreur.

  • Un bufio.Scanner est créé avec bufio.NewScanner, puis sa méthode Scan lit les lignes successives et sa méthode Text fournit la ligne courante.

Compléments

  • La lecture avec fmt.Fscanln ouvre le fichier, fournit les adresses des variables de destination, lit une ligne et ferme ensuite le fichier.

Astuce mémo

Créer, écrire, ouvrir, lire, fermer

17. Interfaces et fonctions génériques

Notions clés & Définitions

  • Interface : Liste nommée de signatures de méthodes, et un type qui possède toutes ces méthodes implante cette interface.

★ À maîtriser

📌 Lorsqu’une fonction prend en paramètre une interface, elle peut recevoir tout type qui implante cette interface.

  • L’interface Forme exige la méthode Perimetre() float64, que les types Carre et Cercle implantent pour pouvoir être comparés par la fonction PlusGrandPerimetre.

Compléments

📐 Formule — Le périmètre d’un carré de côté Cote est calculé par 4×Cote4 \times Cote.

📐 Formule — Le périmètre d’un cercle de rayon Rayon est calculé par 2×π×Rayon2 \times \pi \times Rayon.

Astuce mémo

L’interface impose des méthodes, le type concret fournit l’implantation

18. Interfaces et types compatibles

Notions clés & Définitions

  • Interface : Liste nommée de signatures de méthodes, et tout type qui possède toutes ces méthodes l’implante.
  • Fonction anonyme : Fonction à laquelle aucun nom n’est donné.

★ À maîtriser

📌 Lorsqu’une fonction prend en paramètre un type d’interface, tout type qui implante cette interface peut être fourni en argument.

  • Dans l’exemple Forme, Carre et Cercle implantent l’interface parce qu’ils possèdent chacun une méthode Perimetre() float64, ce qui permet de comparer leurs périmètres avec PlusGrandPerimetre.

  • Une variable de type fonction peut être déclarée avec une signature telle que func(int, int) int, qui indique deux paramètres entiers et une valeur de retour entière.

  • En Go, une fonction peut recevoir une autre fonction en paramètre afin d’appliquer un comportement fourni par l’appelant à des données.

  • La fonction sort.Slice trie un tableau selon une fonction de comparaison fournie en second paramètre, par exemple func(i, j int) bool { return t[i] < t[j] } pour un ordre croissant.

📌 Une fonction Go peut retourner une autre fonction, ce qui permet de générer une fonction à partir de paramètres puis de la réutiliser.

📌 Pour tester file.go avec le paquet testing, il faut créer un fichier file_test.go contenant des fonctions nommées Test<NomFonction> et recevant un pointeur sur testing.T.

  • La commande go test -run regexp exécute uniquement les tests dont le nom correspond à l’expression régulière fournie.

Compléments

📐 Formule — Le périmètre d’un carré de côté c est calculé par P=4cP = 4c, tandis que celui d’un cercle de rayon r est calculé par P=2πrP = 2\pi r.

  • Une fonction anonyme peut être appelée immédiatement en plaçant ses arguments entre parenthèses à la suite de sa déclaration, puis son résultat peut être affecté à une variable.

  • La fonction applique(t []int, f func(x int) int) remplace chaque entier du tableau par le résultat de f appliquée à cet entier.

  • La fonction plusPetit(t []int) func(i, j int) bool retourne une fonction de comparaison qui utilise t pour indiquer à sort.Slice comment trier ce tableau.

  • Le paquet testing fournit notamment les fonctions:

    • t.Error
    • t.Errorf
    • t.Log
    • t.Logf
  • La commande go test -run Etudiant lance uniquement les tests dont le nom contient Etudiant.

Astuce mémo

Une interface décrit des méthodes ; un type l’implante en les possédant toutes.

Tableaux de synthèse

Valeur, adresse et déréférencement

NotationRôleExemple
nValeur d’une variablen
&nAdresse de la variable nvar a *int = &n
*aValeur située à l’adresse contenue dans a*a = 5

Array et slice

PropriétéArraySlice
TailleFixe et intégrée au typeVariable
Passage en fonctionPar valeurStructure contenant un pointeur
MémoireCases directement stockéesArray sous-jacent partagé
Modification de l’originalNon après copieOui si le même array sous-jacent est partagé

Teste tes connaissances

Teste tes connaissances sur Initiation au développement Go avec 60 questions à choix multiples et corrections détaillées.

1. Quelle activité décrit le mieux le développement informatique pour un client ?

2. Pour quelle raison une application informatique doit-elle être optimisée selon plusieurs critères ?

Faire le QCM →

Révisez avec les flashcards

Mémorisez les concepts clés de Initiation au développement Go avec 84 flashcards interactives.

Qu'est-ce que le développement informatique ?

Concevoir, coder, tester et intégrer une solution informatique pour un client.

Selon quels critères doit-on optimiser une application informatique ?

Le temps d’exécution, la précision et la consommation de ressources.

Quels savoirs de référence sont étudiés en développement informatique ?

Les algorithmes fondamentaux, structures de données, listes, tableaux, collections, piles, files, structures, encapsulation, modularité, qualité et fichiers.

Voir les flashcards →

Cours similaires

Crée tes propres fiches de révision

Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.

Générateur de fiches