如何在另一个结构体中使用结构体字段而不将其引用为键

WBOY
发布: 2024-02-10 12:42:17
转载
332 人浏览过

如何在另一个结构体中使用结构体字段而不将其引用为键

在PHP的开发中,经常会遇到在一个结构体中使用另一个结构体字段的情况。然而,直接将其引用为键可能会造成代码的混乱和不易维护。那么如何在另一个结构体中使用结构体字段呢?php小编百草为大家提供了一种简洁明了的解决方案,让你的代码更加清晰和易读。下面就让我们一起来看看吧!

问题内容

我想将一个结构体字段插入到另一个结构体中,而不必使用结构体名称。

我知道我能做到这一点:

type person struct { name string } type user struct { person email, password string }
登录后复制

但是它会产生这个结构:

user := user{person: person{name: ""}, email: "", password: ""}
登录后复制

我怎样才能做这样的事情:

type person struct { name string } type user struct { name person.name // here email, password string }
登录后复制

像这样使用它

user := User{Name: "", Email: "", Password: ""}
登录后复制

可能吗?

解决方法

简单地说,使用当前的语言实现是做不到的。

初始化文字时,您需要明确(或者,换句话说:文字![原文如此])。由于user包含person,因此文字user必须包含文字person,如下所示:

u := user{ person: person{ name: "bob", }, email: "[email protected]", password: "you're kidding right?", }
登录后复制

但是,一旦您拥有user类型的user类型的变量,您就可以利用匿名字段通过user设置(或获取)匿名personname变量

,您就可以利用匿名字段通过 user设置(或获取)匿名

u := user{} u.name = "bob" u.email = "[email protected]", u.password = "you're kidding right?",
登录后复制
person为什么 go 让我做所有这些工作?

让我们想象一下,可以按照您正在寻找的方式初始化内部user结构并添加它自己的name

u := user{ name: "bob" }
登录后复制
登录后复制

现在让我们进一步想象一下,我们稍后修改user结构并添加它自己的name字段:

type user struct { person name string email string password string }
登录后复制

现在您user.person.name的代码相同,但现在它正在初始化user.name可以

显然初始化新的

字段:

u := user{ name: "bob" }
登录后复制
登录后复制

请注意,这与之前初始化

。不好。

user中添加name字段已经类似地“破坏”了user变量上对name更多问题

这样的代码还潜藏着更多的陷阱。person字段,user.person.name

首先,在 user中添加

字段name字段,则this是编组为"name"的字段,并且user.person.name已经类似地“破坏”了user变量上对的非限定引用:

u.name = "bob" // used to set user.person.name, now sets user.name
登录后复制

此外,仅使用匿名user.person.name添加json字段,user.person.name字段默认编组为 json 作为“名称”字段:

{ "name": "", "email": "", "password": "" }
登录后复制

如果添加了字段,则thisperson被编组为带有name是编组为"name"的字段,并且user.person.name字段根本不编组>.

您可能认为可以为标签,例如person的编组字段名称,即使user没有name

type user struct { person `json:"personname"` name string email string password string }
登录后复制
但是

现在

被编组为带有 字段的对象:
{ "PersonName": { "Name": "" }, "Name": "", "Email": "", "Password": "" }
登录后复制
如果您尝试更改匿名 的编组字段名称,即使 user没有 字段,也会发生这种情况。 简而言之:在结构中使用匿名结构作为“添加字段”的方式可能存在问题且脆弱,应该避免。

以上是如何在另一个结构体中使用结构体字段而不将其引用为键的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!