首页 > 解决方案 > 如何在 GO 中初始化多层嵌套结构?

问题描述

我正在尝试在 GO 中初始化以下结构:

这是结构:

type tokenRequest struct {
    auth struct {
        identity struct {
            methods  []string
            password struct {
                user struct {
                    name   string
                    domain struct {
                        id string
                    }
                    password string
                }
            }
        }
    }
}

这是我的代码:

req := &tokenRequest{
    auth: struct {
        identity: struct {
            methods: []string{"password"},
            password: {
                user: {
                    name: os.Username,
                    domain: {
                        id: "default",
                    },
                    password: os.Password,
                },
            },
        },
    },
}

https://play.golang.org/p/e8Yuk-37_nN

我可以在不单独定义所有嵌套结构的情况下进行初始化吗(即auth, identity, password, user

谢谢你。

标签: gostructcomposite-literals

解决方案


如果您有匿名的、未命名的结构类型,则只能在重复结构定义时使用复合文字初始化它们。这是非常不方便的。

所以改为使用命名结构类型,这样你就可以在复合文字中使用它们,如下所示:

类型:

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
}

然后初始化它(在Go Playground上试试):

req := &tokenRequest{
    auth: auth{
        identity: identity{
            methods: []string{"password"},
            password: password{
                user: user{
                    name: os.Username,
                    domain: domain{
                        id: "default",
                    },
                    password: os.Password,
                },
            },
        },
    },
}

请参阅相关问题:Unexpected return of anonymous struct


推荐阅读