QCM : Fondamentaux du langage Go — 29 questions

Questions et réponses du QCM

1. Dans quel contexte et par quelles personnes Go a-t-il été développé ?

Chez Microsoft, par Anders Hejlsberg, Bjarne Stroustrup et Linus Torvalds
Chez Apple, par Rob Pike, Dennis Ritchie et Ken Thompson
Chez Google, par Robert Griesemer, Rob Pike et Ken Thompson
Chez Google, par James Gosling, Guido van Rossum et Brendan Eich

Chez Google, par Robert Griesemer, Rob Pike et Ken Thompson

Explication

Go a été conçu chez Google à partir de 2007 par Robert Griesemer, Rob Pike et Ken Thompson pour répondre aux limites rencontrées avec le C++ dans les infrastructures distribuées. Le C++ a motivé la conception de Go, mais n’est pas le lieu ni l’équipe de sa création.

2. À quelle date la première version stable publique de Go, appelée Go 1.0, est-elle sortie ?

En avril 2016
En mars 2012
En octobre 2007
En novembre 2009

En mars 2012

Explication

Go 1.0, première version stable publique du langage, est sortie en mars 2012. Une version numérotée go1.26.4 correspond à une version stable plus récente et ne désigne pas cette première publication.

3. Quelle combinaison décrit correctement plusieurs atouts fondamentaux de Go ?

Une syntaxe simple, un typage non vérifié et une documentation séparée
Une syntaxe complexe, un typage dynamique et des outils externes
Une syntaxe simple, un typage statique fiable et des outils intégrés
Une syntaxe orientée objet, un typage optionnel et des tests manuels

Une syntaxe simple, un typage statique fiable et des outils intégrés

Explication

Go associe une syntaxe simple, un typage statique fiable et des outils intégrés pour les paquets, les tests, le formatage et la documentation. Un typage dynamique ou des outils entièrement séparés ne correspondent pas à ces caractéristiques.

4. Quel ensemble de domaines correspond aux usages courants de Go ?

Les backends, les outils en ligne de commande et les infrastructures cloud
Les bases de données relationnelles, les navigateurs et les systèmes experts
Les retouches d’images, la mise en page et l’animation 3D
Les tableurs, les traitements de texte et les pilotes graphiques

Les backends, les outils en ligne de commande et les infrastructures cloud

Explication

Go est utilisé pour les projets backend, les outils en ligne de commande, les infrastructures cloud et les systèmes distribués. Les autres ensembles regroupent des domaines qui ne caractérisent pas les usages indiqués ici.

5. Quelle distinction décrit correctement Docker et Kubernetes ?

Docker automatise la mise à l’échelle, tandis que Kubernetes fournit un langage de programmation
Docker sert à tester les fonctions, tandis que Kubernetes compile les programmes Go
Docker fournit une plateforme de conteneurisation, tandis que Kubernetes gère les applications conteneurisées
Docker décrit les dépendances d’un module, tandis que Kubernetes formate le code source

Docker fournit une plateforme de conteneurisation, tandis que Kubernetes gère les applications conteneurisées

Explication

Docker est une plateforme de conteneurisation développée avec Go, tandis que Kubernetes est un système open source destiné au déploiement, à la mise à l’échelle et à la gestion d’applications conteneurisées. La mise à l’échelle et la gestion relèvent donc de Kubernetes, et non de la fonction principale attribuée à Docker.

6. Qu’est-ce qui caractérise un fichier Go dans un projet ?

C’est un fichier de configuration portant l’extension .mod
C’est un fichier de documentation décrivant les dépendances
C’est un fichier de code source portant l’extension .go
C’est un fichier binaire généré après la compilation

C’est un fichier de code source portant l’extension .go

Explication

Un fichier Go contient du code source, porte l’extension .go et s’organise autour du package, des imports et du code source. Le fichier go.mod décrit plutôt le module et ses dépendances, sans être le fichier principal du code source.

7. Quel rôle joue chacune des principales parties d’un fichier Go ?

Le package lance les tests, les imports produisent l’exécutable et le code définit la version du langage
Le package compile le programme, les imports exécutent les fonctions et le code décrit les dépendances du module
Le package indique l’appartenance, les imports déclarent les packages utilisés et le code contient notamment fonctions et variables globales
Le package contient les dépendances, les imports identifient l’organisation et le code formate automatiquement le fichier

Le package indique l’appartenance, les imports déclarent les packages utilisés et le code contient notamment fonctions et variables globales

Explication

La définition du package indique l’appartenance du fichier, les imports déclarent les packages utilisés et le code source contient notamment les fonctions et les variables globales. Les dépendances du module et sa version sont plutôt décrites dans la configuration du module, pas par ces trois rôles.

8. Quelle caractéristique définit un package en Go ?

Un programme compilé destiné à être lancé depuis le terminal
Une unité regroupant des fichiers .go liés dans un même espace de noms
Une commande organisant automatiquement les fichiers du projet
Un fichier décrivant les versions des dépendances du projet

Une unité regroupant des fichiers .go liés dans un même espace de noms

Explication

Un package regroupe des fichiers .go partageant un espace de noms et une logique commune. Le fichier de versions relève du module, tandis que la compilation et l’organisation automatique correspondent à d’autres mécanismes.

9. Deux fichiers Go placés dans un même dossier peuvent-ils appartenir à des packages différents ?

Oui, lorsqu’un fichier contient une fonction main
Oui, si chaque fichier déclare un identifiant de package différent
Non, les fichiers d’un même dossier appartiennent au même package
Non, sauf si le dossier contient un fichier go.mod

Non, les fichiers d’un même dossier appartiennent au même package

Explication

Tous les fichiers Go d’un même dossier appartiennent au même package. Un sous-dossier peut en revanche définir un package différent, sans que la présence de main ou de go.mod modifie cette règle.

10. Quelle distinction décrit correctement un package main et un package utilitaire ?

main produit un exécutable, tandis qu’un package utilitaire fournit du code réutilisable
main organise plusieurs dossiers, tandis qu’un package utilitaire lance le programme
main contient des types exportés, tandis qu’un package utilitaire contient des types privés
main regroupe des dépendances, tandis qu’un package utilitaire définit le fichier go.mod

main produit un exécutable, tandis qu’un package utilitaire fournit du code réutilisable

Explication

Le package main contient func main() et produit un binaire exécutable. Un package utilitaire est conçu pour fournir du code réutilisable et ne constitue pas un programme exécutable autonome.

11. Quel identifiant peut être utilisé depuis un autre package Go ?

Une constante nommée valeur avec une initiale minuscule
Un type nommé donnees avec une initiale minuscule
Une fonction nommée Calculer avec une initiale majuscule
Une variable nommée resultat avec une initiale minuscule

Une fonction nommée Calculer avec une initiale majuscule

Explication

En Go, un identifiant commençant par une majuscule est exporté et accessible depuis un autre package. Une initiale minuscule rend l’identifiant non exporté dans ce contexte.

12. Quelle commande initialise un module Go en créant le fichier go.mod ?

go build nom_du_module
go mod tidy nom_du_module
go get nom_du_module
go mod init nom_du_module

go mod init nom_du_module

Explication

La commande go mod init initialise le module et crée son fichier go.mod. go mod tidy synchronise les dépendances, tandis que go get agit sur une dépendance externe.

13. Quelle association entre commandes Go et actions est correcte ?

go fmt compile, go build exécute et go run formate
go fmt synchronise, go build formate et go run installe
go fmt formate, go build compile et go run compile puis exécute
go fmt exécute, go build synchronise et go run génère go.mod

go fmt formate, go build compile et go run compile puis exécute

Explication

go fmt formate le code, go build compile un package ou un chemin et génère un exécutable, tandis que go run compile puis exécute un fichier. Les autres associations attribuent à ces commandes des rôles qui appartiennent à d’autres opérations.

14. Quelle propriété caractérise une variable Go ?

Elle est définie sans identifiant ni valeur associée
Elle ne possède pas d’adresse mémoire gérée par le langage
Elle peut changer de type après chaque affectation
Elle conserve un type unique pendant l’exécution

Elle conserve un type unique pendant l’exécution

Explication

Une variable Go est une valeur nommée d’un type unique, dont la mémoire est gérée automatiquement par Go. Elle ne change donc pas de type au gré des affectations.

15. Quelle affirmation distingue correctement string et rune en Go ?

string représente un entier signé, tandis que rune représente un entier non signé
string représente un octet, tandis que rune représente un nombre flottant
string représente une chaîne UTF-8, tandis que rune représente un point de code Unicode
string représente une valeur logique, tandis que rune représente une chaîne vide

string représente une chaîne UTF-8, tandis que rune représente un point de code Unicode

Explication

Le type string représente une chaîne UTF-8 et sa valeur par défaut est la chaîne vide, tandis que rune représente un point de code Unicode et vaut 0 par défaut. Les autres propositions confondent ces types avec des entiers, des booléens ou des flottants.

16. Quelle association de types primitifs Go est correcte ?

int est signé, uint est non signé, byte accepte des valeurs illimitées et float64 n’a pas de précision définie
int est flottant, uint est logique, byte code les caractères et float64 offre environ 3 chiffres de précision
int est non signé, uint est signé, byte va de -128 à 127 et float64 offre environ 7 chiffres de précision
int est signé, uint est non signé, byte va de 0 à 255 et float64 offre environ 15 chiffres de précision

int est signé, uint est non signé, byte va de 0 à 255 et float64 offre environ 15 chiffres de précision

Explication

int est un entier signé, uint un entier non signé, byte couvre les valeurs de 0 à 255 et float64 fournit environ 15 chiffres de précision. Les autres associations inversent les signes, les plages ou la nature des types.

17. Quelle syntaxe permet à Go de déduire automatiquement le type d’une variable à partir de la valeur affectée ?

const avec une valeur immuable
= appliqué à une variable existante
var avec le type écrit explicitement
:= avec une valeur d’initialisation

:= avec une valeur d’initialisation

Explication

L’opérateur := déclare une nouvelle variable et laisse Go déduire son type depuis la valeur fournie. La forme var peut aussi déclarer une variable, mais elle indique explicitement le type au lieu de le faire inférer.

18. Quelle instruction modifie la valeur d’une variable déjà déclarée sans en créer une nouvelle ?

x = nouvelleValeur
x := nouvelleValeur
const x = nouvelleValeur
var x nouvelleValeur

x = nouvelleValeur

Explication

L’opérateur = affecte une nouvelle valeur à une variable existante. L’opérateur := sert plutôt à déclarer et initialiser une nouvelle variable dans une portée adaptée.

19. Quel est le rôle principal du contrôle de flux dans un programme ?

Organiser l’exécution selon des conditions ou des répétitions
Réserver une zone mémoire pour les constantes du programme
Parcourir les éléments d’une collection dans un ordre déterminé
Convertir automatiquement chaque valeur vers un nouveau type

Organiser l’exécution selon des conditions ou des répétitions

Explication

Le contrôle de flux organise le déroulement du programme en choisissant l’exécution de blocs ou en les répétant selon des conditions. Le parcours d’une collection relève plutôt d’une boucle range.

20. Que renvoie une comparaison entre deux valeurs en Go ?

Un entier indiquant l’écart entre les valeurs
Une valeur booléenne true ou false
Une chaîne contenant le résultat de la comparaison
Une nouvelle variable dont le type est inféré

Une valeur booléenne true ou false

Explication

Une comparaison produit une valeur booléenne, soit true, soit false. Les opérateurs logiques peuvent ensuite combiner plusieurs résultats booléens.

21. Dans quelle situation le bloc else d’une structure conditionnelle s’exécute-t-il ?

Après chaque condition avant son évaluation
Lorsque la première condition évaluée est vraie
Lorsque plusieurs conditions sont vraies simultanément
Lorsque les conditions précédentes ne sont pas vérifiées

Lorsque les conditions précédentes ne sont pas vérifiées

Explication

Le bloc else constitue la branche exécutée lorsqu’aucune condition précédente n’est satisfaite. Une branche if s’exécute au contraire dès que sa propre condition est vraie.

22. Que se passe-t-il dans une instruction switch lorsqu’aucun case ne correspond à l’expression évaluée ?

La structure recommence l’évaluation de tous les cases
Le premier case est exécuté par défaut
L’expression est convertie en valeur booléenne
Le bloc default est exécuté

Le bloc default est exécuté

Explication

Dans un switch, default prend le relais lorsqu’aucun case ne correspond à l’expression. Le premier case n’est exécuté que si sa comparaison correspondante est satisfaite.

23. Dans quel ordre les étapes d’une boucle for avec itérateur se déroulent-elles à chaque cycle ?

Mise à jour, bloc, condition, initialisation
Initialisation, condition, bloc, mise à jour
Condition, mise à jour, initialisation, bloc
Bloc, initialisation, condition, mise à jour

Initialisation, condition, bloc, mise à jour

Explication

Une boucle for avec itérateur initialise la variable, vérifie la condition, exécute le bloc puis met à jour l’itérateur. Cet enchaînement permet de contrôler progressivement le nombre de répétitions.

24. Quelle condition doit être satisfaite pour qu’une boucle for utilisée comme boucle tant que s’arrête normalement ?

Sa condition doit finalement devenir fausse
Son itérateur doit être déclaré avec const
Son bloc doit contenir une instruction switch
Sa condition doit rester vraie pendant chaque tour

Sa condition doit finalement devenir fausse

Explication

Une boucle for de type tant que continue tant que sa condition est vraie et doit donc devenir fausse pour se terminer. Si elle reste vraie sans modification pertinente, le programme risque une boucle infinie.

25. Lorsqu’une boucle for range parcourt une collection, que représente la valeur fournie à chaque itération ?

Une copie de l’élément correspondant
Une référence modifiable vers l’élément original
Le nombre total d’éléments restant à parcourir
La condition de continuation de la boucle

Une copie de l’élément correspondant

Explication

La boucle range fournit notamment l’index ou la clé et une copie de la valeur correspondante. Pour modifier l’élément original, il faut utiliser son index ou sa clé plutôt que modifier directement cette copie.

26. Quelle différence décrit correctement break et continue dans une boucle ?

break modifie l’itérateur, tandis que continue annule la condition
break relance la boucle, tandis que continue quitte le programme
break ignore la condition, tandis que continue exécute chaque branche
break quitte la boucle, tandis que continue passe à l’itération suivante

break quitte la boucle, tandis que continue passe à l’itération suivante

Explication

L’instruction break interrompt immédiatement la boucle, alors que continue saute le reste du tour actuel et passe au suivant. Continue ne met donc pas fin à la boucle elle-même.

27. Quel élément définit le mieux une fonction en programmation Go ?

Un espace réservé qui décrit le type d’une variable dans le programme
Une structure de contrôle qui répète des instructions selon une condition
Un bloc nommé et réutilisable qui regroupe des instructions appelables
Une donnée persistante qui conserve une valeur entre plusieurs appels

Un bloc nommé et réutilisable qui regroupe des instructions appelables

Explication

Une fonction regroupe des instructions dans une unité logique nommée pouvant être appelée et réutilisée. Une donnée persistante correspond plutôt à une variable, qui ne décrit pas par elle-même un ensemble d’instructions.

28. Dans une déclaration de fonction Go, quel rôle jouent respectivement les arguments et les valeurs de retour ?

Les arguments définissent la portée, tandis que les valeurs de retour nomment le corps de la fonction
Les arguments contrôlent les répétitions, tandis que les valeurs de retour déclarent les variables locales
Les arguments fournissent les entrées, tandis que les valeurs de retour fournissent les résultats à l’appelant
Les arguments indiquent les résultats, tandis que les valeurs de retour fournissent les données d’entrée

Les arguments fournissent les entrées, tandis que les valeurs de retour fournissent les résultats à l’appelant

Explication

Les arguments transmettent les données d’entrée à la fonction, alors que les valeurs de retour transmettent ses résultats à l’appelant. Confondre ces deux rôles inverse le sens des échanges entre la fonction et son appelant.

29. Une fonction contient un paramètre formel portant le même nom qu’une variable globale du package. Quelle variable est utilisée dans le corps de cette fonction lorsqu’elle est référencée par ce nom ?

La variable globale, car elle appartient au niveau du package
Une nouvelle variable locale, créée automatiquement lors de la référence
Le paramètre formel, car il masque la variable globale dans la fonction
La valeur de retour, car elle remplace les variables portant le même nom

Le paramètre formel, car il masque la variable globale dans la fonction

Explication

Dans le corps de la fonction, le paramètre formel masque la variable globale qui porte le même nom. La variable globale demeure accessible dans les contextes situés hors de cette portée masquante.

Révisez avec les flashcards

Mémorisez les réponses avec 66 flashcards sur Fondamentaux du langage Go.

Qui a développé Go chez Google à partir de 2007 ?

Robert Griesemer, Rob Pike et Ken Thompson.

Pourquoi Go a-t-il été créé chez Google ?

Pour dépasser les limites du C++ dans les services cloud et infrastructures distribuées.

Quand est sortie la première version stable publique de Go ?

En mars 2012.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Fondamentaux du langage Go.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM