Maison >développement back-end >Golang >Comment puis-je simplifier l'initialisation de structures imbriquées dans Go ?

Comment puis-je simplifier l'initialisation de structures imbriquées dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-11 00:32:11367parcourir

How Can I Simplify Nested Struct Initialization in Go?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn