Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐹
Debutant 25 min Go

Debuter avec Go

Pourquoi Go ?

Le langage de programmation Go, souvent appelé Golang pour sa simplicité et son efficacité, est aujourd'hui un choix populaire dans la communauté des développeurs. Son utilisation s'étend à travers les entreprises du monde entier, de grandes multinationales comme Google et Uber à startups plus petites. Il offre une grande productivité en termes de temps de développement et d'efficacité, tout en étant conçu pour être concurrentiel et équilibré.

Un cas concret d'utilisation de Go est son emploi dans la création de microservices. Les entreprises qui nécessitent de gérer des architectures distribuées peuvent bénéficier de l’immense parallélisme offert par Go. Par exemple, une application e-commerce complexe peut être divisée en plusieurs services Go, chacun se concentrant sur une fonctionnalité spécifique (paiement, catalogue, stockage, etc.), facilitant ainsi le développement et la maintenance.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Connaissances de base en programmation : Aucune connaissance spécifique à Go n'est requise, mais une compréhension générale du concept de programmation est nécessaire.
  • Outils d'installation :
    • Go : Téléchargez et installez la dernière version de Go depuis le site officiel : https://golang.org/dl/
      # Installez Go sur macOS (avec Homebrew)
      brew install go
      
      # Installez Go sur Linux
      sudo apt-get update && sudo apt-get install golang-go
      
      # Installez Go sur Windows (téléchargez le binaire depuis le site officiel et ajoutez-le à votre PATH)
      
    • Un éditeur de code : Vous pouvez utiliser n'importe quel éditeur, mais Visual Studio Code est largement recommandé avec l'extension Go installée (https://code.visualstudio.com/docs/languages/go).

Concepts fondamentaux

Variables et Types

En Go, les variables sont déclarées explicitement en utilisant le mot-clé var. Les types de données disponibles incluent les entiers (int, uint), les nombres à virgule flottante (float32, float64), les chaînes de caractères (string) et les booléens (bool).

## Déclaration d'une variable avec un type explicite
var age int = 30

## Déclaration d'une variable sans type (Go infère le type)
name := "John Doe"

## Constante
const pi float64 = 3.14159

Fonctions

Les fonctions en Go sont définies avec le mot-clé func. Elles peuvent retourner des valeurs, et vous pouvez également passer des arguments à une fonction.

## Déclaration d'une fonction simple
func greet(name string) string {
    return "Hello, " + name + "!"
}

## Appel de la fonction
message := greet("Alice")
fmt.Println(message)

Boucles et Contrôles de Flux

Go propose les boucles for, if, else, et switch pour contrôler le flux du programme.

## Boucle for classique
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

## Condition if-else
number := 10
if number > 5 {
    fmt.Println("Number is greater than 5")
} else {
    fmt.Println("Number is less than or equal to 5")
}

## Contrôle de flux avec switch
day := "Monday"
switch day {
case "Monday":
    fmt.Println("It's Monday!")
default:
    fmt.Println("It's another day.")
}

Structures et Interfaces

Les structures en Go sont des groupes de champs (variables) et peuvent être utilisées pour représenter des objets complexes. Les interfaces définissent un ensemble de méthodes qu'une structure doit implémenter.

## Déclaration d'une structure
type Rectangle struct {
    Width  float64
    Height float64
}

## Méthode pour la structure Rectangle
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

## Interface définissant une méthode
type Shape interface {
    Area() float64
}

## Utilisation de l'interface
rect := Rectangle{Width: 10, Height: 5}
var s Shape = rect
fmt.Println("Area:", s.Area())

Pointeurs

Les pointeurs en Go permettent d'accéder à la mémoire directement. Ils sont utilisés pour passer des arguments par référence et modifier les valeurs dans une fonction.

## Déclaration d'un pointeur
var ptr *int = &age

## Accès à la valeur pointée
fmt.Println("Age:", *ptr)

## Modification de la valeur via le pointeur
*ptr = 31
fmt.Println("New age:", age)

Mise en pratique : Projet fil rouge

Mini-Projet: Gestionnaire de Tâches

Pour notre projet, nous allons créer un gestionnaire de tâches simple. Ce programme permettra d'ajouter des tâches, de les afficher et de les marquer comme terminées.

Étape 1 : Structure du Projet

Créez un nouveau répertoire pour votre projet et initialisez-le avec Go :

mkdir go-todo-app
cd go-todo-app
go mod init todoapp

Étape 2 : Déclaration des Structures

Dans le fichier main.go, déclarez les structures nécessaires.

package main

import "fmt"

type Task struct {
    ID        int
    Description string
    Completed bool
}

var tasks []Task = []Task{}

func addTask(description string) {
    task := Task{ID: len(tasks) + 1, Description: description, Completed: false}
    tasks = append(tasks, task)
    fmt.Println("Task added:", task.Description)
}

func listTasks() {
    if len(tasks) == 0 {
        fmt.Println("No tasks found.")
        return
    }
    for _, task := range tasks {
        status := "Pending"
        if task.Completed {
            status = "Completed"
        }
        fmt.Printf("%d. %s - %s\n", task.ID, task.Description, status)
    }
}

func markTaskAsComplete(id int) {
    for i, task := range tasks {
        if task.ID == id {
            tasks[i].Completed = true
            fmt.Println("Task marked as complete:", task.Description)
            return
        }
    }
    fmt.Println("Task not found.")
}

Étape 3 : Fonction main

Ajoutez la fonction main pour gérer les commandes utilisateur.

func main() {
    for {
        fmt.Println("\nTodo App")
        fmt.Println("1. Add Task")
        fmt.Println("2. List Tasks")
        fmt.Println("3. Mark Task as Complete")
        fmt.Println("4. Exit")
        var choice int
        fmt.Print("Enter your choice: ")
        fmt.Scan(&choice)

        switch choice {
        case 1:
            var description string
            fmt.Print("Enter task description: ")
            fmt.Scan(&description)
            addTask(description)
        case 2:
            listTasks()
        case 3:
            var id int
            fmt.Print("Enter task ID to mark as complete: ")
            fmt.Scan(&id)
            markTaskAsComplete(id)
        case 4:
            fmt.Println("Exiting...")
            return
        default:
            fmt.Println("Invalid choice. Please try again.")
        }
    }
}

Étape 4 : Exécution du Programme

Exécutez le programme en utilisant la commande go run.

go run main.go

Vous devriez voir un menu interactif où vous pouvez ajouter des tâches, les afficher et les marquer comme terminées.

Erreurs fréquentes et debugging

Erreur 1 : Syntaxe de déclaration incorrecte

Code incorrect :

var x = 5

Correction :

x := 5

Erreur 2 : Accès à un index invalide d'un tableau

Code incorrect :

arr := [3]int{1, 2, 3}
fmt.Println(arr[3])

Correction :

arr := [3]int{1, 2, 3}
if len(arr) > 3 {
    fmt.Println(arr[3])
} else {
    fmt.Println("Index out of range.")
}

Erreur 3 : Utilisation de := hors d'une fonction

Code incorrect :

func main() {
    if true {
        x := 5
    }
    fmt.Println(x)
}

Correction :

func main() {
    var x int
    if true {
        x = 5
    }
    fmt.Println(x)
}

Pour aller plus loin

1. Concurrency avec Go

Go offre une API de concurrency robuste qui vous permet d'écrire des applications concurrentes efficaces et évolutives.

2. Packages et Modules

Go utilise des packages pour organiser le code de manière modulaire et réutilisable. Les modules permettent de gérer les dépendances du projet.

  • Liens : https://gobyexample.com/modules
  • Défi : Créez un module Go et ajoutez une dépendance externe (par exemple, github.com/gin-gonic/gin) pour créer une API simple avec le framework Gin.

3. Tests unitaires en Go

Les tests unitaires sont essentiels pour la qualité du code. Go offre des outils de test intégrés et simples à utiliser.

  • Liens : https://gobyexample.com/testing
  • Défi : Écrivez un test unitaire pour une fonction que vous avez écrite dans votre projet de gestionnaire de tâches.

Défi pratique

Implémentez un simple serveur HTTP qui répond à chaque requête avec "Hello, World!" et mesure le temps d'exécution pour chaque requête. Utilisez la bibliothèque standard Go net/http et mesurez le temps grâce à l'interface time.

package main

import (
    "fmt"
    "net/http"
    "time"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    start := time.Now()
    // Simuler du travail
    time.Sleep(100 * time.Millisecond)
    duration := time.Since(start)
    fmt.Fprintf(w, "Hello, World! Time taken: %v", duration)
}

func main() {
    http.HandleFunc("/", helloHandler)
    fmt.Println("Starting server at port 8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        panic(err)
    }
}

Ce défi vous permettra d'appliquer les concepts de concurrence et de gestion du temps que vous avez appris dans ce tutoriel.

Besoin d'aide sur Go ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce que Go?
Go est une langue de programmation concurrente créée par Google par Robert Griesemer, Rob Pike et Ken Thompson en 2007.
Comment installer Go sur mon ordinateur?
Pour installer Go, rendez-vous sur le site officiel (golang.org/dl/), téléchargez la version appropriée pour votre système d'exploitation et suivez les instructions d'installation fournies.
Quelles sont les principales caractéristiques de Go?
Go est connu pour son simplicité, sa vitesse, son modèle concurrentiel (goroutines et channels) et sa gestion automatique des ressources.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.