Go 中嵌套结构的字面初始化
在 Go 中实现复杂的数据结构时,初始化嵌套结构可能是一个挑战。在某些情况下,需要直接初始化这些结构,而不显式定义每个嵌套级别。
问题陈述
考虑以下结构:
type tokenRequest struct { auth struct { identity struct { methods []string password struct { user struct { name string domain struct { id string } password string } } } } }
初始化这个结构的天真的尝试可能看起来像this:
req := &tokenRequest{ auth: struct { identity: struct { methods: []string{"password"}, password: { user: { name: os.Username, domain: { id: "default", }, password: os.Password, }, }, }, }, }
解决方案:命名结构类型
简化此初始化的关键是使用命名结构类型。这允许您定义一次结构并在多个地方使用它:
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 }
使用命名结构类型,您现在可以直接初始化 tokenRequest 结构:
req := &tokenRequest{ auth: auth{ identity: identity{ methods: []string{"password"}, password: password{ user: user{ name: os.Username, domain: domain{ id: "default", }, password: os.Password, }, }, }, }, }
这提供了在 Go 中初始化嵌套结构体的更直接、更简洁的方法。
以上是如何简化 Go 中的嵌套结构初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!