Liens utiles
-
la liste des "Advent of Code"
Antisèches Go
Les bases
- opérations et comparaisons [AFFICHER]
-
opérations +
,-
,*
,/
pour les entiers et flottants,%
(modulo) pour les entiers... ||
(ou),&&
(et),!
(négation) pour les booléens... >>
,<<
(décalage),|
,&
(ou/et bit à bit),^
(négation bit à bit et XOR bit à bit)... +
(concaténation pour les chaines)comparaisons ==
,!=
,>
,<
,<=
,>=
pour les entiers, flottants ou chaines - types [AFFICHER]
-
types int8
,int16
,int32
etint64
entiers 8, 16, 32 ou 64 bits... variantes uint8
, ...,uint64
pour les entiers non signés ;byte
est un synonyme deuint8
... int
etuint
pour les entiers "machine" (32 ou 64 bits suivants l'architecture)... float32
etfloat64
pour les flottants 32 ou 64 bits... string
pour les chaines (non mutable, comme en Python)... []int
pour les tableaux d'entiers,[][]float64
pour les tableaux à 2 dimensions de flottants, etc.... map[string] int
pour les dictionnaires avec chaines comme clés et des entiers comme valeurs, etc. - tableaux et dictionnaires [AFFICHER]
-
tableaux len(T)
(taille),T[0]
pour l'accès à une case... Attention T[i]
provoque une erreur sii<0
oui>=len(T)
... T = append(T, 1)
ouT = append(T, 1,2,3)
pour ajouter des éléments à la fin d'un tableaudictionnaires D[k]
renvoie la valeur associée à la clék
, ou la valeur "zéro" si la clé n'est pas présente... v, ok = D[k]
met la valeur deD[k]
dansv
, et un booléen dansok
: vrai sik
était présente, faux sinoninitialisation (tableau) T := make([]int)
déclare un tableau vide d'entiers... T := make([]int, 10)
déclare un tableau d'entiers de taille 10, où toutes les cases ont la valeur "zéro"... T := []int{1,2,3}
déclare un tableau d'entiers de taille 3, avec les éléments1
,2
et3
initialisation (dictionnaire) D := make(map[string]int)
déclare un dictionnaire vide... D := map[string]int{"un": 1, "deux": 2}
déclare un dictionnaire - variables [AFFICHER]
-
variables (déclaration) var n int
: déclaration sans initialisation (valeur par défaut: "zéro")... var n int = 10
: déclaration avec initialisation... n := 10
: déclaration simple, le type est inféré... Attention : x := 10
ouvar x int
peuvent redéfinir une nouvelle variable dans un sous blocaffectation n = 10
: affectation pour une variable existante... +=
,-=
, etc. permettent de faire une mise à joursx += 3
est équivalent àx = x+3
, etc.... i++
eti--
sont équivalents ài = i+1
eti = i-1
affectation multiple a,b,c = 1,2,3
affectation de plusieurs variablesdéclaration multiple a,b,c := 1,2,3
déclaration de plusieurs variables... Attention, dans a,b,c := 1,2,3
seules les variables que l'on peut (re)déclarer sont déclarées; pour les autres, cela fait une affectation - fonctions [AFFICHER]
-
fonction func f(x float64, n int) {
première ligne d'une définition de fonction à 2 arguments, sans valeur de retour... func f(n int) string {
première ligne d'une définition de fonction à 1 argument, qui renvoie une chaine... func f(n int) (string, bool) {
première ligne d'une définition de fonction à 1 argument, qui renvoie 2 valeurs... Attention, si f
renvoie 2 valeurs, il faut utiliser 2 variables pour enregistrer le résultat :s, b := f(12)
.... On peut ignorer un des résultats avec _
:s, _ := f(12)
- boucles et conditionnelles [AFFICHER]
-
conditionnelles if <CONDITION> {...} else {...}
... if <INIT>; <CONDITION> {...} else {...}
permet de définir des variables (avec:=
) uniquement pour la conditionnelleboucles for <INIT>; <CONDITION>; <MAJ> {...}
... for <CONDITION> {...}
(c'est la boucle while !)... for {...}
pour une boucle infinie... continue
etbreak
fonctionnent comme d'habitude
Séance 1 (18-08-2025)
-
Vérifiez que go fonctionne correctement sur votre machine, par exemple en lançant la commande
$ go version
-
Installez le plugin Go dans vscode, (ou un autre plugin dans un autre IDE).
-
Testez un programme de type hello world.
-
Connectez vous sur Advent of Code, par exemple avec votre compte Github.
-
Pour initialiser un nouveau module ("projet"), il faut lancer la commande
$ go mod init <NOM_DU_MODULE>
dans le répertoire du module.
-
Votre fichier doit commencer par la ligne
package main
et un des fichiers du projets doit contenir une fonction
main
sans argument ni valeur de retour. -
Le mot clé pour définir une fonction est
func
, et la fonction Go pour faire un affichage simple estfmt.Println
. (Attention à ne pas oublier la majuscule !) Elle fonctionne comme la fonctionprint
de Python. Vous pouvez aussi utiliserfmt.Printf
pour avoir une fonction similaire àprintf
du langage C. Pour utiliserfmt.Println
, il faut ajouterimport "fmt"
en haut du du fichier. Normalement, vscode s'en chargera tout seul ! -
Si votre plugin Go est bien installé, votre code sera automatiquement formaté à chaque sauvegarde !
-
Pour lancer votre programme, il faut utiliser la commande
$ go run .
ou le lancer à partir de vscode.
Écrivez un programme pour résoudre les problèmes suivants (parties 1 et 2).
année | jours | lien |
---|---|---|
2022 | 1 | Calorie Counting |
2020 | 2 | Password Philosophy |
2021 | 2 | Dive! |
Notez bien que pour obtenir vos fichier de données personnalisés, vous devez être connecté sur le site Advent of Code.
Un problème est résolu lorsque vous avez pu valider votre réponse sur le site et que vous avez obtenu les 2 étoiles "**" correspondantes. (Ou une seule étoile "*" pour les 25 décembre.)
Note : Eric Wastl, le créateur de Advent of Code, demande explicitement que les fichiers de données ne soient pas partagés sur Internet. Ne les mettez donc pas dans un dépot Git public.
Pour gagner du temps
- lecture des lignes d'un fichier
-
f, _ := os.Open(filename) sc := bufio.NewScanner(f) for sc.Scan() { line := sc.Text() ... }
- conversion depuis une chaine
-
Les fonctions du module
strconv
permettent de convertir des chaines en entiers, flottants, etc. Parcourez la documentation des fonctionsstrconv.Atoi
,strconv.ItoA
,strconv.ParseBool
,strconv.ParseFloat
,strconv.ParseInt
,strconv.ParseUint
en cas de besoin.Attention, ces fonctions renvoient deux valeurs : le résultat et un code d'erreur. Pour ignorer ce dernier, il faut donc écrire :
var n int n, _ = strconv.Atoi(<CHAINE>)
- documentation
-
Vous pouvez obtenir la documentation de la bibliothèque standard avec
$ go doc bufio $ go doc strconv.parsebool
- extraction de valeurs d'une chaine formatée, à la scanf
-
var i, j int var color string fmt.Sscanf(s, "(%d,%d): %s", &i, &j, &color)
Si
s
est la chaine"(12,-123): rouge clair"
, les variablesi
etj
auront les valeurs12
et-123
, et la variablecolor
aura la valeur"rouge"
. - tri
-
La fonction
slices.Sort
permet de trier un tableau dans l'ordre croissant.
Travail à la maison
-
Commencez le tutoriel officiel
-
Parcourez les conseils de style officiels Go style guide et Go Style Decisions (notamment la partie sur les noms de variables).
-
Écrivez un programme qui utilise un dictionnaire et un programme qui utilise une structure (cf tutoriel), et réfléchissez aux différences entre ces 2 types de données.
-
Finissez les problèmes Advent of Code commencés :
2022 1 Calorie Counting 2020 2 Password Philosophy 2021 2 Dive!