Menu
Coddy logo textTech

Aide-mémoire Go

Dernière mise à jour

Hello World et structure d'un programme

Chaque programme Go vit dans un package ; le point d'entrée est func main dans le package main.

OpérationSyntaxe
Déclaration de packagepackage main
Importer un packageimport "fmt"
Importer plusieurs packagesimport (\n "fmt"\n "os"\n)
Point d'entréefunc main() { ... }
Afficher une lignefmt.Println("Hello, World!")
Affichage formatéfmt.Printf("%d items\n", n)
Exécuter un fichiergo run main.go
Construire un binairego build

Variables et types

Go est typé statiquement mais peut inférer les types avec :=.

OpérationSyntaxe
Déclarer avec le typevar age int = 30
Déclarer avec inférencevar name = "Ada"
Déclaration courtecount := 0
Plusieurs à la foisx, y := 1, 2
Constanteconst Pi = 3.14
Valeurs zéro0, "", false, nil
Types de baseint, float64, string, bool, byte, rune
Conversion de typef := float64(i)

Contrôle de flux

Go n'a qu'un mot-clé de boucle - for - et pas de parenthèses autour des conditions.

OpérationSyntaxe
If / elseif x > 0 { ... } else { ... }
If avec instruction d'initif v, ok := m[k]; ok { ... }
Boucle for (style C)for i := 0; i < 10; i++ { ... }
Boucle de style whilefor x < 100 { ... }
Boucle infiniefor { ... }
Range sur une slicefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
Switch sans expressionswitch { case x > 0: ... }
Break / continuebreak, continue

Fonctions

Les fonctions sont des valeurs de première classe et peuvent renvoyer plusieurs résultats.

OpérationSyntaxe
Fonction de basefunc add(a int, b int) int { return a + b }
Type de paramètre partagéfunc add(a, b int) int { ... }
Valeurs de retour multiplesfunc divmod(a, b int) (int, int) { return a / b, a % b }
Valeurs de retour nomméesfunc split(sum int) (x, y int) { x = sum / 2; return }
Fonction variadiquefunc sum(nums ...int) int { ... }
Fonction anonymef := func() { ... }
Fermeturefunc counter() func() int { ... }
Defer (s'exécute au retour)defer file.Close()

Slices et tableaux

Les tableaux ont une taille fixe ; les slices sont des vues dynamiques sur des tableaux.

OpérationSyntaxe
Tableau de taille fixevar a [3]int
Littéral de slicenums := []int{1, 2, 3}
Créer une slices := make([]int, 0, 10)
Ajouter (append)s = append(s, 4)
Longueur / capacitélen(s), cap(s)
Extraire une sous-slices[1:3]
Copiercopy(dst, src)
Itérerfor i, v := range s { ... }

Maps

Les maps sont les tables de hachage intégrées de Go.

OpérationSyntaxe
Créer une mapm := make(map[string]int)
Littéral de mapm := map[string]int{"a": 1, "b": 2}
Définir une valeurm["c"] = 3
Obtenir une valeurv := m["a"]
Vérifier l'existencev, ok := m["x"]
Supprimer une clédelete(m, "a")
Longueurlen(m)
Itérerfor k, v := range m { ... }

Structures et méthodes

Les structures regroupent des champs ; les méthodes attachent un comportement via un récepteur.

OpérationSyntaxe
Définir une structuretype Point struct { X, Y int }
Créer une instancep := Point{X: 1, Y: 2}
Accéder à un champp.X
Pointeur vers une structurep := &Point{1, 2}
Méthode à récepteur valeurfunc (p Point) Dist() float64 { ... }
Méthode à récepteur pointeurfunc (p *Point) Move(dx int) { p.X += dx }
Structure embarquéetype Circle struct { Point; R int }
Tags de structureName string avec un tag json:"name" entre backticks

Interfaces

Les interfaces sont satisfaites implicitement - tout type ayant les bonnes méthodes convient.

OpérationSyntaxe
Définir une interfacetype Shape interface { Area() float64 }
Implémenter (implicite)func (c Circle) Area() float64 { ... }
Interface vide (any)var x interface{} ou var x any
Assertion de types, ok := x.(string)
Switch de typeswitch v := x.(type) { case int: ... }
Interface Stringerfunc (p Point) String() string { ... }

Goroutines et canaux

Les goroutines sont des threads légers ; les canaux font passer des valeurs entre elles.

OpérationSyntaxe
Démarrer une goroutinego doWork()
Créer un canalch := make(chan int)
Canal tamponnéch := make(chan int, 5)
Envoyer vers un canalch <- 42
Recevoir d'un canalv := <-ch
Fermer un canalclose(ch)
Range sur un canalfor v := range ch { ... }
Select sur des canauxselect { case v := <-ch: ...; default: ... }
Groupe d'attentevar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Gestion des erreurs

Go renvoie les erreurs comme des valeurs - il n'y a pas d'exceptions.

OpérationSyntaxe
Renvoyer une erreurfunc read() (string, error) { return "", err }
Vérifier une erreurif err != nil { return err }
Créer une erreurerrors.New("not found")
Erreur formatéefmt.Errorf("bad id %d", id)
Envelopper une erreurfmt.Errorf("load: %w", err)
Désencapsuler / comparererrors.Is(err, os.ErrNotExist)
Comparer par typeerrors.As(err, &target)
Panic / recoverdefer func() { recover() }()

La syntaxe Go que vous utilisez le plus, sur une seule page. Cet aide-mémoire Go est une référence rapide pour le cœur du langage - variables et types, slices et maps, structures et interfaces, plus les goroutines et les canaux qui font briller le Golang en matière de concurrence.

Tout ce qui figure ici est du Go standard et se compile avec la chaîne d'outils officielle. Copiez ce dont vous avez besoin, ou essayez chaque extrait en direct dans le playground Go - aucune installation requise.

FAQ de l'aide-mémoire Go

Cet aide-mémoire Go est-il gratuit ?
Oui. Cet aide-mémoire Go est entièrement gratuit, sans inscription. Mettez-le en favori et revenez dès que vous devez retrouver une opération sur les slices, un schéma de canal ou une méthode de structure.
Quelle est la différence entre := et var en Go ?
var x = 0 déclare une variable et fonctionne partout, y compris au niveau du package. x := 0 est la déclaration courte de variable : elle déclare et affecte à la fois, infère le type, et ne peut être utilisée qu'à l'intérieur d'une fonction. Utilisez var quand vous avez besoin d'un type explicite ou d'une variable de niveau package, et := pour des déclarations locales concises.
Que sont les goroutines et les canaux ?
Une goroutine est un thread léger géré par le runtime Go - vous en démarrez une en écrivant go someFunc(). Les canaux sont des tuyaux typés qui permettent aux goroutines de communiquer en toute sécurité : une goroutine envoie avec ch <- v et une autre reçoit avec <-ch. Ensemble, ils forment le modèle de concurrence central de Go, résumé par l'adage « partagez la mémoire en communiquant ».
Puis-je m'entraîner à Go en ligne ?
Oui. Ouvrez le playground Go pour exécuter n'importe quel extrait de cet aide-mémoire dans votre navigateur - aucune chaîne d'outils Go à installer. Quand vous voulez de la structure, le cours Go interactif gratuit de Coddy vous emmène des variables et des slices jusqu'aux goroutines et aux canaux, étape par étape.
Cet aide-mémoire convient-il aux débutants ?
Oui. Il est organisé des sujets les plus courants (variables, contrôle de flux, fonctions) jusqu'aux plus avancés (goroutines, canaux, gestion des erreurs), pour que vous puissiez utiliser les premières sections dès le premier jour et progresser vers le reste.
Coddy programming languages illustration

Apprenez Go avec Coddy

COMMENCER