Initialisation littérale des structures imbriquées dans Go
Lors de la mise en œuvre de structures de données complexes dans Go, l'initialisation des structures imbriquées peut être un défi. Dans certains cas, il est souhaitable d'initialiser ces structures directement, sans définir explicitement chaque niveau imbriqué.
Énoncé du problème
Considérez la structure suivante :
type tokenRequest struct { auth struct { identity struct { methods []string password struct { user struct { name string domain struct { id string } password string } } } } }
Une tentative naïve d'initialisation de cette structure pourrait ressembler à ceci :
req := &tokenRequest{ auth: struct { identity: struct { methods: []string{"password"}, password: { user: { name: os.Username, domain: { id: "default", }, password: os.Password, }, }, }, }, }
Solution : types de structure nommés
La clé pour simplifier cette initialisation est d'utiliser des types de structure nommés. Cela vous permet de définir la structure une fois et de l'utiliser à plusieurs endroits :
type domain struct { id string } type user struct { name string domain domain password string } type password struct { user user } type identity struct { methods []string password password } type auth struct { identity identity } type tokenRequest struct { auth auth }
Avec les types de structure nommés, vous pouvez désormais initialiser directement la structure tokenRequest :
req := &tokenRequest{ auth: auth{ identity: identity{ methods: []string{"password"}, password: password{ user: user{ name: os.Username, domain: domain{ id: "default", }, password: os.Password, }, }, }, }, }
Cela fournit un méthode plus simple et concise pour initialiser des structures imbriquées dans Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!