Méthodes d'initialisation
Initialisation avec les valeurs par défaut
Lorsque vous déclarez un struct sans initialisation explicite, Golang attribue automatiquement des valeurs par défaut à ses champs :
type User struct {
Username string
Age int
Active bool
}
func main() {
var user User
// user.Username est "", user.Age est 0, user.Active est false
}
Initialisation champ par champ
Vous pouvez initialiser un struct en spécifiant des valeurs pour des champs spécifiques :
user := User{
Username: "johndoe",
Age: 30,
Active: true,
}
Initialisation positionnelle
Les structs peuvent également être initialisés en fournissant des valeurs dans l'ordre de déclaration des champs :
user := User{"johndoe", 30, true}
graph TD
A[Struct Initialization] --> B[Zero Value]
A --> C[Field-by-Field]
A --> D[Positional]
A --> E[Composite Literal]
Initialisation partielle
Vous pouvez initialiser seulement certains champs, en laissant les autres avec leurs valeurs par défaut :
user := User{
Username: "johndoe",
Active: true,
}
// Age sera 0
Initialisation de structs imbriqués
Pour les structs contenant d'autres structs, vous pouvez les initialiser de manière similaire :
type Address struct {
Street string
City string
}
type Employee struct {
Name string
Address Address
}
emp := Employee{
Name: "John Doe",
Address: Address{
Street: "123 Main St",
City: "Anytown",
},
}
Comparaison des méthodes d'initialisation
Méthode |
Avantages |
Inconvénients |
Valeur par défaut |
Simple, automatique |
Contrôle limité |
Champ par champ |
Claire, lisible |
Verbeuse pour de nombreux champs |
Positionnelle |
Concise |
Sujette aux erreurs, moins lisible |
Partielle |
Flexible |
Risque de valeurs par défaut non intentionnelles |
Fonctions similaires à des constructeurs
Bien que Golang n'ait pas de constructeurs traditionnels, vous pouvez créer des fonctions qui retournent des structs initialisés :
func NewUser(username string, age int) User {
return User{
Username: username,
Age: age,
Active: true,
}
}
user := NewUser("johndoe", 30)
Initialisation avec un pointeur
Vous pouvez également initialiser des structs sous forme de pointeurs :
user := &User{
Username: "johndoe",
Age: 30,
}
Meilleures pratiques
- Utilisez des méthodes d'initialisation significatives
- Privilégiez l'initialisation avec des noms de champs pour la lisibilité
- Créez des fonctions similaires à des constructeurs pour une logique d'initialisation complexe
- Soyez cohérent dans votre approche d'initialisation
En maîtrisant ces méthodes d'initialisation, vous écrirez un code Golang plus robuste et plus lisible avec LabEx.