Menu
CoddyTech

Fonctions constructeurs

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy. Leçon 10 sur 107.

Go n’a pas de constructeurs comme d’autres langages. À la place, la convention consiste à créer une fonction nommée NewTypeName qui renvoie une structure initialisée, souvent sous forme de pointeur.

Fonction de constructeur de base

type Person struct {
    Name string
    Age  int
}

func NewPerson(name string, age int) *Person {
    return &Person{
        Name: name,
        Age:  age,
    }
}

Constructeur avec des valeurs par défaut

type Config struct {
    Host    string
    Port    int
    Timeout int
}

func NewConfig(host string) *Config {
    return &Config{
        Host:    host,
        Port:    8080,    // Valeur par défaut
        Timeout: 30,      // Valeur par défaut
    }
}

Constructeur avec validation

func NewPerson(name string, age int) *Person {
    if name == "" {
        name = "Unknown"
    }
    if age < 0 {
        age = 0
    }
    return &Person{
        Name: name,
        Age:  age,
    }
}

Utiliser des fonctions constructrices

func main() {
    p1 := NewPerson("Alice", 25)
    fmt.Println(p1.Name) // Alice

    p2 := NewPerson("", -5)
    fmt.Println(p2.Name) // Unknown
    fmt.Println(p2.Age)  // 0
}

Les fonctions constructrices renvoient un pointeur (*StructName) en utilisant &. Cela évite de copier la structure et permet aux méthodes avec des récepteurs pointeurs de fonctionner directement. La validation et les valeurs par défaut se placent dans le constructeur.

challenge icon

Défi

Moyen

Crée une fonction constructeur NewBankAccount pour la structure BankAccount avec validation :

  • Prend name (string) et balance (float64) comme paramètres
  • Si name est vide, utilise "Unnamed" par défaut
  • Si balance est négatif, utilise 0 par défaut
  • Définit toujours Owner sur "Default Owner"
  • Renvoie un pointeur vers la nouvelle structure

Essayez vous-même

package main

import "fmt"

func main() {
    var name string
    var balance float64
    fmt.Scan(&name, &balance)

    account := NewBankAccount(name, balance)

    fmt.Printf("Account: %s\n", account.Name)
    fmt.Printf("Balance: %.2f\n", account.Balance)
    fmt.Printf("Owner: %s\n", account.Owner)
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Go en ligne